自动计算字符长度
在web应用中,经常要进行截字显示。
举例
|
截取前5个字符
|
我是中国人民的儿子,我深爱着我的祖国和人民
|
我是中国人
|
abcdefghijklmnopqrstuvwxyz
|
abcde
|
[em01]表情符号
|
[em01
|
<img src=”adddd” />表情符号
|
<img s
|
从上面实例看来,简单得采用length去截字,缺陷还是很多的。可以做如下改进:
1. 汉字相当于2个字母宽度,这样如果中英文混排,会更整齐。
2. 能够识别[em01],把这个当作一个字符
3. 能够识别html标记<img….>当作一个字符。
举例
|
截取前5个字符
|
我是中国人民的儿子,我深爱着我的祖国和人民
|
我是中国人
|
abcdefghijklmnopqrstuvwxyz
|
abcdefghilj
|
[em01]表情符号
|
[em01] 表情符号
|
<img src=”adddd” />表情符号
|
<img src=”adddd” />表情符号
|
这个算法程序如下:
/**
* 返回固定长度的字符串
*
* @param str
* @return
*/
public static String toFixedString(String str, int length) {
if (ValidateUtil.isNull(str))
return "";
//去掉一开始的html
while (str.indexOf(" ") == 0) {
str = str.substring(6);
}
StringBuffer sb = new StringBuffer();
boolean count = true; //是否计数
for (int x = 0, y = 0; x < str.length() && y < length * 2; x++) {
char c = str.charAt(x);
if (c == '/r' || c == '/n' || c == '/t') continue;
//去掉空格
if (count && c == ' ') continue;
if (isGbk(c)) {
y += 2;
count = true;
} else {
if (c == '&' || c == '<') {
count = false;
}
if (c == ';' || c == '>') {
count = true;
}
if (count) {
y++;
}
}
sb.append(c);
}
if (!sb.toString().equals(str)) {
//说明被截取过了
sb.append("…");
}
return sb.toString();
}