在使用计算带中文的字符串长度函数时,遇到一段代码没太理解
我的问题
这行代码str.charCodeAt(i) & 0xff00
怎么理解,具体作用是什么?
全部代码
let str = "刘建的世界123"
// 计算中文字符串的长度(方法1)
var helper = {};
helper.getRealLength = function(str) {
///<summary>获得字符串实际长度,中文2,英文1</summary>
///<param name="str">要获得长度的字符串</param>
var realLength = 0, len = str.length, charCode = -1;
for (var i = 0; i < len; i++) {
charCode = str.charCodeAt(i);
if (charCode >= 0 && charCode <= 128)
realLength += 1;
else
realLength += 2;
}
return realLength;
};
console.log('方法(1)length== ', helper.getRealLength(str))
// 计算中文字符串的长度(方法2)
var l = str.length;
var blen = 0;
for(i=0; i<l; i++) {
if ((str.charCodeAt(i) & 0xff00) != 0) {
blen ++;
}
blen ++;
}
console.log('方法(2)length== ', blen)
// 计算中文字符串的长度(方法3)
let regCN = /[\u0391-\uFFE5]/g
let len = 0
for(var i in str) {
// console.log(i);
console.log(regCN.test(str[i]), regCN.lastIndex);
if(regCN.test(str[i])) {
console.log(str[i] + "=2");
len += 2
} else {
console.log(str[i] + "=1");
len += 1
}
}
console.log(len)
str = str.replace(/[\u0391-\uFFE5]/g,"aa");
console.log('方法(3)length== ', str.length)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
str.charCodeAt(i)
判断是否是中文字符:当 str.charCodeAt(i) > 255 时,表示是中文字符
否则如果是任何一个小于 256 的字符
可以直接使用如下代码 有一样的效果
上述使用了一个按位与的操作符的奇淫巧计
str.charCodeAt(i) & 0xff00
表示取两字节中的高位字节,中文高位字节不为0,所以blen执行了两次自加。下面是&操作的情况