我正在构建一个xml解析器,它遍历一个大的xml文件,所以我正在寻找快速的方法
检测字符串是否包含字符(不是" "
,"/n"
或"/r"
)。我尝试使用正则表达式,但它太慢了。我尝试的其他方法是获取" "
,"/n"
和"/r"
的数量,并从字符串的大小推断它,如果它大于那么至少有一个字符。这种方法也很慢。有人可以建议我更快的方式吗?
答案 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)
太慢是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毫秒内变慢。
我希望它足够清楚。谢谢!