JAVA识别字符串是数字(英文)还是汉字,web页面进行字符截断的帮助类
2016-08-25 13:57
465 查看
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..
相关文章推荐
- C#、Java实现按字节截取字符串包含中文汉字和英文字符数字标点符号等
- java 正则表达式 验证字符串 只包含汉字英文数字
- java 集合 有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数
- Java编程,从文件中读取一行字符串,统计数字,英文字符,其他的个数。
- 对上次“对字符串进行简单的字符数字统计 探索java中的List功能 ”程序,面向对象的改进
- [NLP自然语言处理]计算熵和KL距离,java实现汉字和英文单词的识别,UTF8变长字符读取
- Java简单统计字符串中汉字,英文字母及数字数量的方法
- 如何判断一个字符串是否仅由数字or仅由数字英文字符or仅由汉字组成
- 【Java】利用Math.Random()方法随机出四个字符的字符串,字符包括数字,大小写英文字母
- java小练习:输入一个字符,判断该字符是数字?英文字母?还是其他字符
- java用正则表达式判断字符串中是否仅包含英文字母、数字和汉字
- java用正则表达式判断字符串中是否仅包含英文字母、数字和汉字
- Java 统计字符串里英文字母、空格、数字和其它字符的个数
- 笔试题——编写java程序:输入一个字符串,判断有几个英文字母,有几个数字,有几个其它的字符
- java用正则表达式判断字符串中是否仅包含英文字母、数字和汉字
- java用正则表达式判断字符串中是否仅包含英文字母、数字和汉字
- java用正则表达式判断字符串中是否仅包含英文字母、数字和汉字
- 用js识别字符串中的英文字母字符和非字符(汉字)
- 不区分汉字还是英文和数字,按指定字节长度截取字符串
- 获取包含中文,字母,数字集合的字符串的长度(1个汉字字符存储需要2个字节,1个英文字符存储需要1个字节)