是否有任何优化的方法来实现非英文字母的字符计数?例如,如果我们用英文单词“Mother”,它是一个 6 个字母的单词。但是,如果您在泰米尔语中键入相同的单词 (மதர்),它是一个三个字母的单词 (ம+த+ர்),但最后一个字母 (ர்) 将被系统视为两个字符 (ர+ஂ=ர்)。那么有什么方法可以统计真实字符的个数吗?
一个线索是,如果我们将键盘上的光标移动到单词(மதர்),它只会通过3个字母而不是系统考虑的4个字符,那么有什么办法可以通过这个找到解决方案?对此的任何帮助将不胜感激...
最佳答案
更新
吃完午饭回来 =) 恐怕以前的任何外语都无法很好地工作 所以我用一种可能的方式添加了另一个 fiddle
var UnicodeNsm = [Array 1280] //It holds all escaped Unicode Non Space Marks
function countNSMString(str) {
var chars = str.split("");
var count = 0;
for (var i = 0,ilen = chars.length;i<ilen;i++) {
if(UnicodeNsm.indexOf(escape(chars[i])) == -1) {
count++;
}
}
return count;
}
var English = "Mother";
var Tamil = "மதர்";
var Vietnamese = "mẹ"
var Hindi = "मां"
function logL (str) {
console.log(str + " has " + countNSMString(str) + " visible Characters and " + str.length + " normal Characters" ); //"மதர் has 3 visible Characters"
}
logL(English) //"Mother has 6 visible Characters and 6 normal Characters"
logL(Tamil) //"மதர் has 3 visible Characters and 4 normal Characters"
logL(Vietnamese) //"mẹ has 2 visible Characters and 3 normal Characters"
logL(Hindi) //"मां has 1 visible Characters and 3 normal Characters"
所以这只是检查字符串中是否有任何字符是 Unicode NSM 字符并忽略它的计数,这应该适用于大多数语言,而不仅仅是泰米尔语, 一个包含 1280 个元素的数组应该不是什么大的性能问题
这是一个包含 Unicode NSM 的列表 http://www.fileformat.info/info/unicode/category/Mn/list.htm
这是根据 JSBin
在尝试了一些字符串操作之后,结果是
String.indexOf
返回相同的 for
"ர்"
和 "ர"
意义
"ர்ரர".indexOf("ர்") == "ர்ரர".indexOf("ர"+ "்")//true
但
"ர்ரர".indexOf("ர") == "ர்ரர".indexOf("ர"+ "ர")
//假
我借此机会尝试了这样的事情
//ர்
var char = "ரர்ர்ரர்்";
var char2 = "ரரர்ர்ரர்்";
var char3 = "ர்ரர்ர்ரர்்";
function countStr(str) {
var chars = str.split("");
var count = 0;
for(var i = 0, ilen = chars.length;i<ilen;i++) {
var chars2 = chars[i] + chars[i+1];
if (str.indexOf(chars[i]) == str.indexOf(chars2))
i += 1;
count++;
}
return count;
}
console.log("--");
console.log(countStr(char)); //6
console.log(countStr(char2)); //7
console.log(countStr(char3)); //7
这似乎适用于上面的字符串,它可能需要一些调整,因为我对编码和其他东西一无所知,但也许你可以从它开始
这是 JSBin
关于javascript - 计算外语中出现的字符数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13815678/