我需要实现一个非常粗略的语言识别算法。在我的世界里,只有两种语言:英语和非英语。我有 ArrayList,我需要确定每个字符串是否可能是英语或其他 Unicode 字符在一定范围内的语言。所以我想做的是使用某种类型的“存在”测试来检查每个字符串是否符合此范围。如果通过测试,我就说这个字符串不是英文,否则就是英文。我想尝试两种类型的测试:
- TEST-ANY:如果字符串中的任何字符落在范围内,则该字符串通过测试
- TEST-ALL:如果字符串中的所有字符都在范围内,则该字符串通过测试
由于数组可能很长,我需要非常有效地实现它。在 Java 中执行此操作最快的方法是什么?
谢谢
更新:我专门通过查看特定范围的 Unicode 来检查非英语,而不是检查字符是否为 ASCII,部分原因是为了解决下面提到的“恢复”问题。我想要弄清楚的是,Java 是否提供了任何类/方法来尽可能有效地实现 TEST-ANY 或 TEST-ALL(或其他类似的测试)。换句话说,我试图避免重新发明轮子,特别是如果在我之前发明的轮子更好的话。
最佳答案
以下是我最终实现 TEST-ANY 的方法:
// TEST-ANY
String str = "wordToTest";
int UrangeLow = 1234; // can get range from e.g. http://www.utf8-chartable.de/unicode-utf8-table.pl
int UrangeHigh = 2345;
for(int iLetter = 0; iLetter < str.length() ; iLetter++) {
int cp = str.codePointAt(iLetter);
if (cp >= UrangeLow && cp <= UrangeHigh) {
// word is NOT English
return;
}
}
// word is English
return;
关于Java:寻找最快的方法来检查字符串是否存在特定范围内的 Unicode 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10890449/