我正在构建一个 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/