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 ...
随机推荐
- protobuf示例
Google protobuf 是一个高性能的序列化结构化数据存储格式的接口描述语言,具有多语言支持,协议数据小,方便传输,高性能等特点.通过将结构化数据序列化(串行化)成二进制数组,并将二进制数组反 ...
- ArcGisServer根据最大最小坐标换算瓦片行列号【转】
1.前言 在上一节中我们知道了屏幕上一像素等于实际中多少单位长度(米或经纬度)的换算方法,而知道这个原理后,接下来我们要怎么用它呢?它和我们前端显示地图有什么关联呢?这一节,我会尽量详细的将这两个问题 ...
- SharePoint2010 对象模型 关联列表
有关列表的创建其实网上已经有很多文章了,其中练习 :利用Visual Studio 2010创建列表这篇文章个人感觉还不错,这里我强调的是对象模型来创建.在这之前我插入一点其他的东东,导入电子表格和数 ...
- Mac-OSX下Ruby更新
Mac下是自带Ruby环境的,在有些情况我们是需要更新Ruby的,安装和更新Ruby环境可以通过rvm命令进行操作,rvm在安装过程中通过HomeBrew安装依赖包,如果之前没有装过HomeBrew, ...
- 荔枝FM 字体文件 IconFontTextView
使用效果 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android ...
- WebView&HTML5-----使用WebView播放HTML5视频文件
一.问题描述 HTML5提供了很多新的特性比如,视频播放.web本地存储.地理定位.应用缓存.Canvas等,但这些特性需要浏览器的支持,在Android应用中我们可以使用WebView构建Web应用 ...
- 大数据开发实战:Stream SQL实时开发三
4.聚合操作 4.1.group by 操作 group by操作是实际业务场景(如实时报表.实时大屏等)中使用最为频繁的操作.通常实时聚合的主要源头数据流不会包含丰富的上下文信息,而是经常需要实时关 ...
- js文件流下载通用方法
通常我们会用到文件流下载文件,下面给大家一个通用的文件流下载的js /* *下载文件 * options:{ * url:'', //下载地址 * isNewWinOpen:false,是否新窗口打开 ...
- (转)C/C++ 程序设计员应聘常见 面试笔试 试题深入剖析
C/C++ 程序设计员应聘常见 面试笔试 试题深入剖析 http://www.nowcoder.com/discuss/1826?type=2&order=0&pos=23&p ...
- CentOS7安装 Apache HTTP 服务器
CentOS7安装 Apache HTTP 服务器 时间:2015-05-02 00:45来源:linux.cn 作者:linux.cn 举报 点击:11457次 不管你因为什么原因使用服务器,大部分 ...