JAVA识别字符串是数字(英文)还是汉字,web页面进行字符截断的帮助类
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页面进行字符截断的帮助类相关推荐
- Java计算字符串中的英文字母的个数
Java计算字符串中的英文字母的个数 方式一 为如果该字符串中只有数字和字母可以用!Character.isDigit()的方式计算字母个数 方式二为不管是什么样的字符串直接用Character.is ...
- Java对字符串中数字进行按自然顺序排序
Java对字符串中数字进行按自然顺序排序 import java.util.Arrays;public class Test01 {public static void main(String[] a ...
- java读取字符串中数字
java从字符串中提取数字 随便给你一个含有数字的字符串,比如: String s="eert343dfg56756dtry66fggg89dfgf"; 那我们如何把其中的数字提取 ...
- java 去除字符串中的英文_Java利用正则表达式去掉字符串中的英文
利用正则表达式去掉字符串中的英文String str = "111,aaa,222,bbb"; Pattern p = Pattern.compile("[a-zA-z] ...
- JAVA判断字符串中是否包含中文汉字
汉字的Unicode范围扩展了好多次了,网上的各种判断正则都是之前的,漏了很多 汉字 下面是最新的最全的判断正则 /*** 判断字符串中是否包含中文汉字** @param content* @retu ...
- java返回字符串浏览器换行_解决浏览器显示页面长字符串换行问题总结
问题产生 在web页面HTML中,容器(div,table等)中如果放入过长的字符串(英文.数字和部分标点符号组成,无空格),将会撑大容器,破坏页面外观. 出现这种情况基本有两个可能: 1. 人为的恶 ...
- java统计string中文数字英文_Java学习(4):统计一个文件中的英文,中文,数字,其他字符以及字符总数...
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.F ...
- 【高级Java架构师系统学习】java十六进制字符串转数字
一.字节跳动技术一面(算法) Java 的 16 进制与字符串的相互转换函数 JAVA 时间格式化处理 将毫秒转化为日期 文本的倒序输出 判断一个数字是奇数还是偶数 用Hibernate 实现分页 3 ...
- Java判断字符串的数字类型(小数、整数)
java判断数字类型是否为小数,可以采用正则表达式的方式来判断,以下是使用正则表达式来判断数字类型是否为小数的代码:public void checkNumber(String str) {if(nu ...
最新文章
- ASP.NET 下载文件方式
- SLAM | 视觉SLAM中特征点法与直接法结合:SVO
- 自动机器学习:团队如何在自动学习项目中一起工作?
- python图片识别-用10行Python代码进行图像识别
- vb.net2019-跨平台
- 不小心关闭了explorer.exe进程,桌面变白解决办法
- TensorFlow2-自编码器
- 文件查找_tar_ext34_swap
- Mysql的高可用方案及主从详细配置
- Java 常用对象-StringBuffer类
- 计算机应用基础文字处理测试题,国家开放大学《计算机应用基础》考试与答案形考任务模块2Word2010文字处理系统—客观题测验答案.docx...
- linux界面三个图标,配置Ubuntu Enlightenment桌面环境之三:桌面图标和根菜单_Linux学院_风信网...
- 升级CentOS到最新版本
- Linux 下载工具推荐: Motrix qbittorrent
- 过去式-ed的发音规则
- CMM(Capability Maturity Model) 能力成熟度模型
- 从零开始的RVOS: Referring Video Object Segmentation
- 70年代的健美比赛——施瓦辛格
- 不礼让行人怎么抓拍的_不礼让行人百分百抓拍吗?不礼让行人如何申诉成功
- 第1关 Numpy创建数组 (educoder
热门文章
- View结合组策略进行应用程序下发
- Software_King-jdk配置java
- TextSwitcher--文本切换器
- 前标识(NT AUTHORITY\NETWORK SERVICE)没有对 (转)
- 使用卷积神经网络识别交通标志
- 计算机在人力资源管理中的应用浅谈,计算机技术在人力资源管理工作中的应用.doc...
- iQOO3Android11稳定版,vivo安卓11来了iQOO3 NEX3S尝鲜Androi11测试版!
- 安装Nacos Server
- Spring FactoryBean的开发1
- springAop和AspectJ的关系