java - 检测字符串是否包含特定字符的最快方法

标签 java regex string performance

我正在构建一个 XML 解析器来处理一个大的 XML 文件,并且我正在寻找最快的方法来检测字符串是否包含字符(不是 ""“\n”“\r”)。我尝试过使用正则表达式,但它太慢而且太重。我尝试的另一种方法是获取 """\n""\r" 的 ASCII 编号,并从字符串的大小,如果它更大,则至少有一个字符。这个操作也很重。好的建议将不胜感激。

编辑 - 说明:

一行 XML 解析 + 字符串操作需要 300 毫秒,太慢了。

我实现的两种方法的示例:

通过 Redex:

if (!str.matches(".*\\w.*")
{
  // str that doesn't contains chars
}

通过对 ASCII 值求和:

if (numOfWhitespaces + numOfSpecialChars >= str.length()) // +1 for ending /r in
  str
{
    // str that doesn't contains chars
}

第一个解决方案(Regex)较慢,为 200 毫秒。 对于包含 500 多行的文件(每行都被独立处理),这一点至关重要。

我希望它足够清楚。谢谢!

最佳答案

扫描字符串最快的方法是使用 SAX 监听器

public void characters(char ch[], int start, int length) throws SAXException {
    for(int i=start, end = start+ length; i < end; i++) {
       if(ch[i] <= ' ') {
          // check if it is a white space
       }
    }
}

如果您不使用 SAX 解析器或事件驱动解析器,这可能是您的性能瓶颈。

关于java - 检测字符串是否包含特定字符的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14306149/

相关文章:

java - 创建 EasyMock 模拟会抛出 NoSuchMethodError 异常

regex - sed正则表达式用同名变量替换值

php - 如何删除 `//&lt;![CDATA[` 并结束 `//]]>` ?

string - 对单元格向量进行操作并将其插入单元格数组 MATLAB

java - 使用钻石时编译器推断的类型参数是什么?

等式 5((θ/β) - cos(2πθ/β)) 的 Java Swing GUI

Java EE Maven 无法从/向 java.net 传输 Artifact MANUAL.com.sun.messaging :imq:pom:4. 1

javascript - 检查字符串js中2个字符串的出现次数

c - 如何使用文本文件的内容(制表符分隔格式)来重命名文件夹中的文件?

string - CMake 整数比较不起作用