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处理会有兼容性的问题)。

特写如下帮助类:

  1 /*  3  * Author:   yangzhilong
  4  * Date:     2016年8月25日 下午1:44:36
  5  * Description: //模块目的、功能描述
  6  * History: //修改记录
  7  * <author>      <time>      <version>    <desc>
  8  * 修改人姓名             修改时间            版本号                  描述
  9  */
 10 import org.apache.commons.lang3.StringUtils;
 11
 12 /**
 13  * 〈一句话功能简述〉<br>
 14  * 〈功能详细描述〉
 15  *
 16  * @author yangzhilong
 17  * @see [相关类/方法](可选)
 18  * @since [产品/模块版本] (可选)
 19  */
 20 public class StringSubstringUtils {
 21
 22     private static enum MODEL{UP, DOWN};
 23
 24     /**
 25      * 功能描述: <br>
 26      * 〈功能详细描述〉
 27      *
 28      * @param args
 29      * @throws Exception
 30      * @see [相关类/方法](可选)
 31      * @since [产品/模块版本](可选)
 32      */
 33     public static void main(String[] args) throws Exception {
 34         String str = "测试哈2哈ek";
 35         //4个汉字的宽度
 36         System.out.println(substrByByteLength(str, 16, MODEL.DOWN));
 37         //4个汉字的宽度
 38         System.out.println(substrByByteLength(str, 16, MODEL.UP));
 39
 40         //4个汉字加一个英文的宽度
 41         System.out.println(substrByByteLength(str, 18, MODEL.DOWN));
 42         //4个汉字加一个英文的宽度
 43         System.out.println(substrByByteLength(str, 18, MODEL.UP));
 44
 45         //5个汉字的宽度
 46         System.out.println(substrByByteLength(str, 20, MODEL.DOWN));
 47         //5个汉字的宽度
 48         System.out.println(substrByByteLength(str, 20, MODEL.UP));
 49     }
 50
 51     /**
 52      *
 53      * 功能描述: <br>
 54      * 截图字符串的指定字节长度
 55      *
 56      * @param str
 57      * @param length  字节长度,必须为2的整数倍
 58      * @param model  截取模式,例如截图的地方是一个汉字(4个长度),是保留这个汉字还是不要,UP为保留,DOWN为不保留
 59      * @return
 60      * @throws Exception
 61      * @see [相关类/方法](可选)
 62      * @since [产品/模块版本](可选)
 63      */
 64     public static String substrByByteLength(String str, int length, MODEL model) throws Exception{
 65         if(StringUtils.isBlank(str)){
 66             return str;
 67         }
 68         if(length <=0){
 69             throw new RuntimeException("length必须大于0");
 70         }
 71         if(length%2 != 0){
 72             throw new RuntimeException("length必须是2的整数倍");
 73         }
 74         int tempLengthCount = 0;
 75         for(int i=0,len=str.length(); i<len; i++){
 76             tempLengthCount += Integer.toHexString(str.charAt(i)).length();
 77             if(tempLengthCount>=length){
 78                 if(tempLengthCount > length){
 79                     switch (model) {
 80                         case UP:
 81                             if(i < (len-1)){
 82                                 return str.substring(0, i+1) + "..";
 83                             }else{
 84                                 return str.substring(0, i+1);
 85                             }
 86                         case DOWN:
 87                             if(i <= (len-1))
 88                                 return str.substring(0, i) + "..";
 89                             else
 90                                 return str.substring(0, i);
 91                     }
 92                 }else{
 93                     if(i < (len-1)){
 94                         return str.substring(0, i+1) + "..";
 95                     }else{
 96                         return str.substring(0, i+1);
 97                     }
 98                 }
 99             }
100         }
101         return str;
102     }
103 }

运行结果如下:

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

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

  1. Java计算字符串中的英文字母的个数

    Java计算字符串中的英文字母的个数 方式一 为如果该字符串中只有数字和字母可以用!Character.isDigit()的方式计算字母个数 方式二为不管是什么样的字符串直接用Character.is ...

  2. Java对字符串中数字进行按自然顺序排序

    Java对字符串中数字进行按自然顺序排序 import java.util.Arrays;public class Test01 {public static void main(String[] a ...

  3. java读取字符串中数字

    java从字符串中提取数字 随便给你一个含有数字的字符串,比如: String s="eert343dfg56756dtry66fggg89dfgf"; 那我们如何把其中的数字提取 ...

  4. java 去除字符串中的英文_Java利用正则表达式去掉字符串中的英文

    利用正则表达式去掉字符串中的英文String str = "111,aaa,222,bbb"; Pattern p = Pattern.compile("[a-zA-z] ...

  5. JAVA判断字符串中是否包含中文汉字

    汉字的Unicode范围扩展了好多次了,网上的各种判断正则都是之前的,漏了很多 汉字 下面是最新的最全的判断正则 /*** 判断字符串中是否包含中文汉字** @param content* @retu ...

  6. java返回字符串浏览器换行_解决浏览器显示页面长字符串换行问题总结

    问题产生 在web页面HTML中,容器(div,table等)中如果放入过长的字符串(英文.数字和部分标点符号组成,无空格),将会撑大容器,破坏页面外观. 出现这种情况基本有两个可能: 1. 人为的恶 ...

  7. java统计string中文数字英文_Java学习(4):统计一个文件中的英文,中文,数字,其他字符以及字符总数...

    import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.F ...

  8. 【高级Java架构师系统学习】java十六进制字符串转数字

    一.字节跳动技术一面(算法) Java 的 16 进制与字符串的相互转换函数 JAVA 时间格式化处理 将毫秒转化为日期 文本的倒序输出 判断一个数字是奇数还是偶数 用Hibernate 实现分页 3 ...

  9. Java判断字符串的数字类型(小数、整数)

    java判断数字类型是否为小数,可以采用正则表达式的方式来判断,以下是使用正则表达式来判断数字类型是否为小数的代码:public void checkNumber(String str) {if(nu ...

最新文章

  1. ASP.NET 下载文件方式
  2. SLAM | 视觉SLAM中特征点法与直接法结合:SVO
  3. 自动机器学习:团队如何在自动学习项目中一起工作?
  4. python图片识别-用10行Python代码进行图像识别
  5. vb.net2019-跨平台
  6. 不小心关闭了explorer.exe进程,桌面变白解决办法
  7. TensorFlow2-自编码器
  8. 文件查找_tar_ext34_swap
  9. Mysql的高可用方案及主从详细配置
  10. Java 常用对象-StringBuffer类
  11. 计算机应用基础文字处理测试题,国家开放大学《计算机应用基础》考试与答案形考任务模块2Word2010文字处理系统—客观题测验答案.docx...
  12. linux界面三个图标,配置Ubuntu Enlightenment桌面环境之三:桌面图标和根菜单_Linux学院_风信网...
  13. 升级CentOS到最新版本
  14. Linux 下载工具推荐: Motrix qbittorrent
  15. 过去式-ed的发音规则
  16. CMM(Capability Maturity Model) 能力成熟度模型
  17. 从零开始的RVOS: Referring Video Object Segmentation
  18. 70年代的健美比赛——施瓦辛格
  19. 不礼让行人怎么抓拍的_不礼让行人百分百抓拍吗?不礼让行人如何申诉成功
  20. 第1关 Numpy创建数组 (educoder

热门文章

  1. View结合组策略进行应用程序下发
  2. Software_King-jdk配置java
  3. TextSwitcher--文本切换器
  4. 前标识(NT AUTHORITY\NETWORK SERVICE)没有对 (转)
  5. 使用卷积神经网络识别交通标志
  6. 计算机在人力资源管理中的应用浅谈,计算机技术在人力资源管理工作中的应用.doc...
  7. iQOO3Android11稳定版,vivo安卓11来了iQOO3 NEX3S尝鲜Androi11测试版!
  8. 安装Nacos Server
  9. Spring FactoryBean的开发1
  10. springAop和AspectJ的关系