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 ...
随机推荐
- JavaScript中的方法、方法引用和参数
首先,我们来看一段代码,如果觉得不甚明白的,则本文会对你有益: var player = function (e) { return (function f(m) { ...
- Inferred type 'S' for type parameter 'S' is not within its bound; should extend
在使用springboot 方法报错: Inferred type 'S' for type parameter 'S' is not within its bound; should extends ...
- go语言之进阶篇字符串转换
1.字符串转换 示例: package main import ( "fmt" "strconv" ) func main() { //转换为字符串后追加到字节 ...
- 如何解决在Windows Server 2008 R2 上安装证书服务重启后出现 CertificationAuthority 91错误事件
很久都没写什么博客了,前一段时间学习2008 R2时,在自己的电脑上同时安装AD 和证书 往往会出现一个CertificationAuthority错误,如下: 产生问题的主要原因是: 证书服务器与D ...
- Valid Number leetcode java
题目: Validate if a given string is numeric. Some examples: "0" => true " 0.1 " ...
- 自定义View 可清除内容、设置图标、下划线的输入框 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- MongoDB 通过配置文件启动
mongod启动命令需指定一些参数启动服务,我们通过配置文件的方式配置这些参数加载配置. ./bin/mongod --config ./conf/mongodb.conf(或./bin/mongod ...
- 【Spark】SparkStreaming-流处理-规则动态更新-解决方案
SparkStreaming-流处理-规则动态更新-解决方案 image2017-10-27_11-10-53.png (1067×738) elasticsearch-head Elasticsea ...
- Linq-插入insert
1.简单形式 说明:new一个对象,使用InsertOnSubmit方法将其加入到对应的集合中,使用SubmitChanges()提交到数据库. NorthwindDataContext db = n ...
- Red Hat Enterprise Linux AS release 4 yum源
$sudo vim /etc/yum.conf [main] cachedir=/var/cache/yum debuglevel=2 logfile=/var/log/yum.log pkgpoli ...