这个不能用char数组的,因为char的范围是-128~128,汉字一般大于127的,我提供一个方案,将string转成byte数组,可以跟编码方式,如果是gbk就是两个一组,utf-8是3个一组,遍历数组,使用逻辑与&128如果不为0表示汉字,就按编发方式三个或两个一组,如果为0就是普通的iso-8859-1,也就是一个字节一个字符,这样问题就解决了,希望对你有帮助
public int chineseLength(String s7) {
/**
* 获取字符串的长度,如果有中文,则每个中文字符计为2位
*
* @param value
* 指定的字符串
* @return 字符串的长度
*/
int valueLength = 0;
int number = 0;
String chinese = "[Α-¥]";
/* 获取字段值的长度,如果含中文字符,则每个中文字符长度为2,否则为1 */
for (int q = 0; q < s7.length(); q++) {
/* 获取一个字符 */
String temp = s7.substring(q, q + 1);
/* 判断是否为中文字符 */
if (temp.matches(chinese)) {
/* 中文字符长度为2 */
valueLength += 2;
//返回这个字符串中有几个汉字
number+=1;
} else {
/* 其他字符长度为1 */
valueLength += 1;
}
}
return number;
}
var max = rules[i + 1];
//var len = field.val().length; //原有的校验
//新增的校验
//add by songyf 2013.09.12 修改maxSize 实现中英文字符长度的判断
//区分全角半角字符
var str = field.val();
var strlength=0;
for (var j=0;j
var charCode = str.charCodeAt(j);
if(charCode>=0 && charCode<=128){
strlength = strlength+1;
} else {
strlength=strlength + 2;
}
}
var len = strlength;
这串代码中有部分可以区分是中文字符还是英文字符 ,你看有可以用到的吗
占几个字节是由编码方案决定的。常见的GBK,UTF8 , UTF16各不相同。
为啥要用char? 把一个个String截出来getbytes一下。。。