public static void main(String[] args) {
//长度是2说明是英文/数字/英文状态下的字符,长度为4说明是汉字/中文状态下的字符
String str = "测试2s-+¥2#";
for(int i=0; i<str.length(); i++){
System.out.println("[" + str.charAt(i) + "]的长度为:" + Integer.toHexString(str.charAt(i)).length());
}
}

运行结果:

[测]的长度为:4
[试]的长度为:4
[2]的长度为:2
[s]的长度为:2
[-]的长度为:2
[+]的长度为:2
[¥]的长度为:4
[2]的长度为:2
[#]的长度为:2

针对这个原理可以解决页面上有固定宽度的显示区域,但显示区域的内容超长并且有中英文混合,需要进行截断显示(其实也可以采用css处理,但是有些地方css处理会有兼容性的问题)。

特写如下帮助类:

 /*  * Author:   yangzhilong
* Date: 2016年8月25日 下午1:44:36
* Description: //模块目的、功能描述
* History: //修改记录
* <author> <time> <version> <desc>
* 修改人姓名 修改时间 版本号 描述
*/
import org.apache.commons.lang3.StringUtils; /**
* 〈一句话功能简述〉<br>
* 〈功能详细描述〉
*
* @author yangzhilong
* @see [相关类/方法](可选)
* @since [产品/模块版本] (可选)
*/
public class StringSubstringUtils { private static enum MODEL{UP, DOWN}; /**
* 功能描述: <br>
* 〈功能详细描述〉
*
* @param args
* @throws Exception
* @see [相关类/方法](可选)
* @since [产品/模块版本](可选)
*/
public static void main(String[] args) throws Exception {
String str = "测试哈2哈ek";
//4个汉字的宽度
System.out.println(substrByByteLength(str, 16, MODEL.DOWN));
//4个汉字的宽度
System.out.println(substrByByteLength(str, 16, MODEL.UP)); //4个汉字加一个英文的宽度
System.out.println(substrByByteLength(str, 18, MODEL.DOWN));
//4个汉字加一个英文的宽度
System.out.println(substrByByteLength(str, 18, MODEL.UP)); //5个汉字的宽度
System.out.println(substrByByteLength(str, 20, MODEL.DOWN));
//5个汉字的宽度
System.out.println(substrByByteLength(str, 20, MODEL.UP));
} /**
*
* 功能描述: <br>
* 截图字符串的指定字节长度
*
* @param str
* @param length 字节长度,必须为2的整数倍
* @param model 截取模式,例如截图的地方是一个汉字(4个长度),是保留这个汉字还是不要,UP为保留,DOWN为不保留
* @return
* @throws Exception
* @see [相关类/方法](可选)
* @since [产品/模块版本](可选)
*/
public static String substrByByteLength(String str, int length, MODEL model) throws Exception{
if(StringUtils.isBlank(str)){
return str;
}
if(length <=0){
throw new RuntimeException("length必须大于0");
}
if(length%2 != 0){
throw new RuntimeException("length必须是2的整数倍");
}
int tempLengthCount = 0;
for(int i=0,len=str.length(); i<len; i++){
tempLengthCount += Integer.toHexString(str.charAt(i)).length();
if(tempLengthCount>=length){
if(tempLengthCount > length){
switch (model) {
case UP:
if(i < (len-1)){
return str.substring(0, i+1) + "..";
}else{
return str.substring(0, i+1);
}
case DOWN:
if(i <= (len-1))
return str.substring(0, i) + "..";
else
return str.substring(0, i);
}
}else{
if(i < (len-1)){
return str.substring(0, i+1) + "..";
}else{
return str.substring(0, i+1);
}
}
}
}
return str;
}
}

运行结果如下:

测试哈2..
测试哈2哈..
测试哈2哈..
测试哈2哈..
测试哈2哈e..
测试哈2哈e..

JAVA识别字符串是数字(英文)还是汉字,web页面进行字符截断的帮助类的更多相关文章

  1. EXCEL表格单元格中包含数字英文和汉字,如何自动去掉汉字,保留英文和数字

    EXCEL表格单元格中包含数字英文和汉字,如何自动去掉汉字,保留英文和数字 Function 求数字和字母(对象 As String) '在文本与数字混杂中提取数字和字母   Dim myReg    ...

  2. 在SQL中取出字符串中数字部分或在SQL中取出字符部分

    在SQL中取出字符串中数字部分或在SQL中取出字符部分 编写人:CC阿爸 2013-10-18 近来在开发一个项目时,一包含数字的字符串,需要取出中间的数字部分进行排序.经过baidu搜索.并结合自己 ...

  3. js判断字符串中的英文和汉字

    有时需要判断一个字符是不是汉字,比如在用户输入含有中英文的内容时,需要判断是否超过规定长度就要用到.用 Javascript 判断通常有两种方法. 方法一 正则表达式,test()方法返回true 或 ...

  4. java中字符串与数字的互相转换

    import java.text.DecimalFormat; /* * String类中本身提供方法可以将几乎所有的基本类型转换为String类型 * sysout alt+/ 可以直接显示Syst ...

  5. Java "double字符串转数字"

    1.int 表示数字的简单类型(值类型),double 表示数字的双精度类型(值类型),  而Integer和Double类型是一个引用的复杂类型 2.Integer.valueOf(String s ...

  6. java使字符串的数字加一

    /** * 字符串+1方法,该方法将其结尾的整数+1,适用于任何以整数结尾的字符串,不限格式,不限分隔符. * @author zxcvbnmzb * @param testStr 要+1的字符串 * ...

  7. (转)在SQL中取出字符串中数字部分或在SQL中取出字符部分

    近来在开发一个项目时,一包含数字的字符串,需要取出中间的数字部分进行排序.经过baidu搜索.并结合自己项目的需求,编写了一个自定义的SQL函数用供项目中使用. /****** Object: Use ...

  8. js的字符串是数字时过长的时候会被截断

    JavaScript能表示并进行精确算术运算的整数范围为:正负2的53次方,也即从最小值-9007199254740992到最大值+9007199254740992之间的范围:对于超过这个范围的整数, ...

  9. c/c++再学习:常用字符串转数字操作

    c/c++再学习:常用字符串转数字操作 能实现字符串转数字有三种方法,atof函数,sscanf函数和stringstream类. 具体demo代码和运行结果 #include "stdio ...

随机推荐

  1. Check failed: mdb_status == 0 (13 vs. 0) Permission denied

    文件权限问题. chown或者chmod即可 另外注意lmdb文件的权限

  2. [转] hive0.14-insert、update、delete操作测试

    FROM : http://blog.csdn.net/hi_box/article/details/40820341 首先用最普通的建表语句建一个表: hive>create table te ...

  3. [转]MongoDB基本使用

    转自 : http://www.cnblogs.com/TankMa/archive/2011/06/08/2074947.html 成功启动MongoDB后,再打开一个命令行窗口输入mongo,就可 ...

  4. Windows server 2008 r2 如何开启Win7的Aero效果 (转)

    Aero 桌面体验为开放式外观提供了类似于玻璃的窗口. 它包括与众不同的直观样式,将轻型透明的窗口外观与强大的图形高级功能结合在一起.您可以享受具有视觉冲击力的效果和外观,并可从更快地访问程序中获益. ...

  5. jQuery EasyUI Datagrid性能优化专题(转)

    jQuery  EasyUI的Datagrid组件功能算是很强大了,不过性能确实不怎么乐观,而对于性能问题,网络上几乎也找不到相关的优化资料,所谓的牛人们可能 都望而却步了.本博客以后会带着分析Dat ...

  6. java字符编码转换

    在开发的过程中.字符编码经常令我们头痛.经常会出现各种各样的乱码.以下就介绍java的编码转换和常见的乱码是使用什么样的编码去读取的: 先看一张图片: watermark/2/text/aHR0cDo ...

  7. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十八)ES6.2.2 增删改查基本操作

    #文档元数据 一个文档不仅仅包含它的数据 ,也包含 元数据 —— 有关 文档的信息. 三个必须的元数据元素如下:## _index    文档在哪存放 ## _type    文档表示的对象类别 ## ...

  8. Java归去来第1集:手动给Eclipse配置Maven环境

    一.Eclipse配置Maven 1.1.下载Maven http://maven.apache.org/download.cgi,选择对应的版本,window下载apache-maven-3.5.3 ...

  9. OpenGL ES 3.0 and libGLESv2

    note that libGLESv2 is the recommended Khronos naming convention for the OpenGL ES 3.0 library. This ...

  10. IDEA 不能显示项目里的文件结构

    方法一: 关闭IDEA, 然后删除项目文件夹下的.idea文件夹 重新用IDEA工具打开项目 方法二: 菜单:File -> Invalidate Caches / Restart