Java:寻找最快的方法来检查字符串是否存在特定范围内的 Unicode 字符

标签 java string unicode

我需要实现一个非常粗略的语言识别算法。在我的世界里,只有两种语言:英语和非英语。我有 ArrayList,我需要确定每个字符串是否可能是英语或其他 Unicode 字符在一定范围内的语言。所以我想做的是使用某种类型的“存在”测试来检查每个字符串是否符合此范围。如果通过测试,我就说这个字符串不是英文,否则就是英文。我想尝试两种类型的测试:

  1. TEST-ANY:如果字符串中的任何字符落在范围内,则该字符串通过测试
  2. 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/

相关文章:

java - 检查一个 XML 文件是否是第二个 XML 文件的 "subset"的最简单方法是什么?

java jsoup 删除新行

java - 删除字符串中最后一个已知单词

php - 如何正确解码 XML 文件中的特殊字符?

java - 检查是否从 Google Play 安装了应用程序

java - JMH 基准测试 - 比较替代实现的运行时间的简洁方法

ruby - 如果我对字符串使用 << 运算符,我可以使用几乎任何标识符吗?

c++ - 在 C++ 中将字符串转换为 int

ios - 在 C 和 Objective C 中处理 unicode 字符串

Unicode 字符 xn--ls8h