JAVA技巧(长字符串按指定长度截取)

发布时间:2019-04-10 04:32:56   来源:文档文库   
字号:

JAVA技巧(长字符串按指定长度截取)

web开发中,会遇到这样一个问题,想让某个内容全部保持在一定长度范围内,未超出的行全部显示,超长的行只允许显示一定的长度,结尾用省略号代替。

粗想一下,实现这个功能很容易,直接取字符串的长度(用length()方法),如果超出,就用substring()方法截取一段,然后再在结尾处加上省略号。但实际上这样做是不行的,至少说是某种程度上得不到我们想要的结果,因为一个英文字母和一个汉字用lenth方法得到的值都是1,这不错,但是在显示时,一个汉字占两个字母的位置,这样即使我们截取了指定长度的字符串,但实际显示起来是参差不齐的。下面是我对这个问题给出的解决方案。

/**

*@(#)StringUtil.java

*

*

*@authorExamda

*

*/

publicclassStringUtil{

publicStringUtil(){

}

publicstaticvoidmain(String[]args){

Stringstr="12345afa五左,大有枝节一碟sd.sdfasXXXX-11-22";

System.out.println(StringUtil.omitString(str,30));

str="12345afa五左,大有枝节s一碟sd.sdfasXXXX-11-22";

System.out.println(StringUtil.omitString(str,30));

str="12345afa五左,大有枝节a";

System.out.println(StringUtil.omitString(str,30));

str="12345afa五左,大有枝节基";

System.out.println(StringUtil.omitString(str,30));

}

/*

*计算字符串的字节长度(字母数字计1,汉字及标点计2)

*

*/

publicstaticintbyteLength(Stringstring){

intcount=0;

for(inti=0;i

if(Integer.toHexString(string.charAt(i)).length()==4){

count+=2;

}else{

count++;

}

}

returncount;

}

/*

*按指定长度,省略字符串部分字符

*@paraString字符串

*@paralength保留字符串长

*@return省略后的字符串

*/

publicstaticStringomitString(Stringstring,intlength){

StringBuffersb=newStringBuffer();

if(byteLength(string)>length){

intcount=0;

for(inti=0;i

chartemp=string.charAt(i);

if(Integer.toHexString(temp).length()==4){

count+=2;

}else{

count++;

}

if(count

sb.append(temp);

}

if(count==length-3){

sb.append(temp);

break;

}

if(count>length-3){

sb.append("");

break;

}

}

sb.append("...");

}else{

sb.append(string);

}

returnsb.toString();

}

}

执行结果是:

12345afa五左,大有枝节一...

12345afa五左,大有枝节s...

12345afa五左,大有枝节a

12345afa五左,大有枝节基

本文来源:https://www.2haoxitong.net/k/doc/83505c4059f5f61fb7360b4c2e3f5727a4e92413.html

《JAVA技巧(长字符串按指定长度截取).doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式