日期:2014-05-16 浏览次数:20355 次
今天在做应用时发现, javascripte默认的获取字符串长度, 把 英文 和 中文都按照1来计算
?
比如 var str1 = "Hello";? str1.length的值是等于5
?????? var str2 = "中国";??? str2.length的值是等于2
?
结果和我们所期望的不是很一致, 因为汉字在java等高级语言中是两个字符, str2的长度应该为4.
?
这就引出今天所要解决的问题, 获得中英混合字符串的长度, 和截取字符串的方法
?
代码如下
//获得字符串长度, 包含中文 function strlen(str) { var len = 0; for (var i = 0; i < str.length; i++) { if (str.charCodeAt(i) > 255) len += 2; else len ++; } return len; }
?
//截取字符串, 包含中文 function substr(str, len){ if(!str || !len) { return ''; } //预期计数:中文2字节,英文1字节 var a = 0; //循环计数 var i = 0; //临时字串 var temp = ''; for (i=0;i<str.length;i++){ if (str.charCodeAt(i)>255){ //按照预期计数增加2 a+=2; }else{ a++; } //如果增加计数后长度大于限定长度,就直接返回临时字符串 if(a > len) { return temp; } //将当前内容加到临时字符串 temp += str.charAt(i); } //如果全部是单字节字符,就直接返回源字符串 return str; }
function JsonToStr(o) { var arr = []; var fmt = function(s) { if (typeof s == 'object' && s != null) return JsonToStr(s); return /^(string|number)$/.test(typeof s) ? "'" + s + "'" : s; } for (var i in o) arr.push("'" + i + "':" + fmt(o[i])); return '{' + arr.join(',') + '}'; }