Java更快的方法来检测字符串是否包含char

时间:2013-01-13 17:28:55

标签: java regex string performance

我正在构建一个xml解析器,它遍历一个大的xml文件,所以我正在寻找快速的方法 检测字符串是否包含字符(不是" ""/n""/r")。我尝试使用正则表达式,但它太慢了。我尝试的其他方法是获取" ""/n""/r"的数量,并从字符串的大小推断它,如果它大于那么至少有一个字符。这种方法也很慢。有人可以建议我更快的方式吗?

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

对于一行xml解析+字符串操作,

太慢是300毫秒。 字符串“”检测器不与XML解析器连接,因此不要将它混淆在一起。 对于这个主题,String的起源根本不重要。

解决方案是:

通过redex:

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

按字符串方法:

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

这些行应该应用于任何String(字符串的来源无关紧要)。第一个解决方案(正则表达式解决方案)的时间在两个并行运行(每个解决方案一个,运行50行)(其中每行包含需要检查的字符串)后200毫秒内变慢。

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