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处理会有兼容性的问题)。
特写如下帮助类:
/* * 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页面进行字符截断的帮助类的更多相关文章
- EXCEL表格单元格中包含数字英文和汉字,如何自动去掉汉字,保留英文和数字
EXCEL表格单元格中包含数字英文和汉字,如何自动去掉汉字,保留英文和数字 Function 求数字和字母(对象 As String) '在文本与数字混杂中提取数字和字母 Dim myReg ...
- 在SQL中取出字符串中数字部分或在SQL中取出字符部分
在SQL中取出字符串中数字部分或在SQL中取出字符部分 编写人:CC阿爸 2013-10-18 近来在开发一个项目时,一包含数字的字符串,需要取出中间的数字部分进行排序.经过baidu搜索.并结合自己 ...
- js判断字符串中的英文和汉字
有时需要判断一个字符是不是汉字,比如在用户输入含有中英文的内容时,需要判断是否超过规定长度就要用到.用 Javascript 判断通常有两种方法. 方法一 正则表达式,test()方法返回true 或 ...
- java中字符串与数字的互相转换
import java.text.DecimalFormat; /* * String类中本身提供方法可以将几乎所有的基本类型转换为String类型 * sysout alt+/ 可以直接显示Syst ...
- Java "double字符串转数字"
1.int 表示数字的简单类型(值类型),double 表示数字的双精度类型(值类型), 而Integer和Double类型是一个引用的复杂类型 2.Integer.valueOf(String s ...
- java使字符串的数字加一
/** * 字符串+1方法,该方法将其结尾的整数+1,适用于任何以整数结尾的字符串,不限格式,不限分隔符. * @author zxcvbnmzb * @param testStr 要+1的字符串 * ...
- (转)在SQL中取出字符串中数字部分或在SQL中取出字符部分
近来在开发一个项目时,一包含数字的字符串,需要取出中间的数字部分进行排序.经过baidu搜索.并结合自己项目的需求,编写了一个自定义的SQL函数用供项目中使用. /****** Object: Use ...
- js的字符串是数字时过长的时候会被截断
JavaScript能表示并进行精确算术运算的整数范围为:正负2的53次方,也即从最小值-9007199254740992到最大值+9007199254740992之间的范围:对于超过这个范围的整数, ...
- c/c++再学习:常用字符串转数字操作
c/c++再学习:常用字符串转数字操作 能实现字符串转数字有三种方法,atof函数,sscanf函数和stringstream类. 具体demo代码和运行结果 #include "stdio ...
随机推荐
- docker logs-查看docker容器日志
只限制最后100条的日志,并持续更新日志显示 docker logs -f --tail= CONTAINER_ID docker logs -f --tail CONTAINER_ID http ...
- 【未解决】centos 6.4 xen4.2 在关机的时候很慢
centos xen 在关机的时候 下面的关闭DomUs虚拟机 耗时很长... stopping xenconsoled daemon: [OK] sending shutdown to all Do ...
- 第三章 Typescript 基本数据类型
Typescript 基本数据类型 一.基本数据类型 Boolean Number String Array Tuple Enum Any Void Null 和 Undefined Never 二. ...
- C#系列教程——对一个对象的装箱取消转换
代码如下: [csharp] using System; class Unboxing_Test { static void Main() { ...
- shell脚本用crontab执行和手动执行结果不一致
加上 PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin 这行就好了, shell首部用 #!/usr/bin/env bash 这个移植性更 ...
- wifidog接口文档(转)
目录(?)[-] 网关心跳协议 请求信息 回复格式 例子 用户状态心跳协议 请求格式 注意 回复格式 状态码 例子 跳转协议 请求格式 例子 注册协议 请求格式 例子 wifidog是搭建无线热点认证 ...
- 给ajax表单提交数据前面加上实体名称
有时候我们后台做了一个引用类型例如: 下面的实体以C#为例 public class Order{ public string orderId{get;set;} public OrderItem o ...
- MATLAB 制作GIF图像
前提要求:图像集保存在某个文件夹中,且每个图像以数字形式顺序命名,如001.jpg,002.jpg等. 代码1: 这个代码生成的效果有点问题,建议采用代码2. wm={'overwrite','app ...
- (纪录片)统计的乐趣 The Joy of Stats (2010)
简介: 导演: 丹·希尔曼主演: Hans Rosling类型: 纪录片官方网站: www.bbc.co.uk/programmes/b00wgq0l制片国家/地区: 英国语言: 英语上映日期: 20 ...
- ASP输出JSON数据及客户端jQuery处理方法
首先ASP处理JSON需要json官方提供的JSON For ASP 封装类文件,下载地址:http://code.google.com/p/aspjson/downloads/list 下载最新的J ...