JAVA
/**
* 计算字符串长度. 一个汉字的长度按2计算. 如果给定的字符串为null, 返回0.
*
* @param str
* 待计算长度的字符串
* @return 字符串长度
*/
private static int strlen(String str) {
if (str == null || str.length() <= 0) {
return 0;
}
int len = 0;
char c;
for (int i = str.length() - 1; i >= 0; i--) {
c = str.charAt(i);
if ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'z')
|| (c >= 'A' && c <= 'Z')) {
// 字母, 数字
len++;
} else {
if (Character.isLetter(c)) { // 中文
len += 2;
} else { // 符号或控制字符
len++;
}
}
}
return len;
}
/*
* 处理字符串,如果超出长度,则截取相应长度并在最后加"..." 长度为中文字符长度,
* 如果是数字或英文,则占半个字符长度
* @param str
* @param len
* @return
*/
public final String substringByWidth(String str, int len) {
if (str == null) {
return "";
}
boolean isStrEnd = true;
len = len * 2;
StringBuffer sb = new StringBuffer();
int counter = 0;
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c < 255) {
counter++;
} else {
counter = counter + 2;
}
if (counter > len) {
isStrEnd = false;
break;
}
sb.append(c);
}
if (isStrEnd) {
return sb.toString();
} else {
return sb.toString() + "...";
}
}
JS
'getByteLength': function() {
return this.replace(/[^\x00-\xff]/ig, 'xx').length;
}