0

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

编辑 - 澄清:

对于一行 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
}

第一个解决方案(正则表达式)在 200 毫秒内较慢。在一个有 500 多行的文件上(每行都是独立处理的),这一点至关重要。

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

4

1 回答 1

4

扫描字符串的最快方法是使用 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 解析器或事件驱动解析器,这可能是您的性能瓶颈。

于 2013-01-13T17:50:44.457 回答