我有一个类正在做很多文本处理。对于每个字符串(长度为100到2000个字符),我执行30个不同的字符串替换。Java的String.replace()与String.replaceFirst()与自制软件
例子:
string modified;
for(int i = 0; i < num_strings; i++){
modified = runReplacements(strs[i]);
//do stuff
}
public runReplacements(String str){
str = str.replace("foo","bar");
str = str.replace("baz","beef");
....
return str;
}
“富”,“巴兹”,和所有其他“目标”,预计只出现一次,并且是字符串(不需要实际的正则表达式)。
正如你可以想像,我关心的性能:)
鉴于此,
replaceFirst()
似乎一个不错的选择,因为它不会使用Pattern.LITERAL
,并会做额外的处理与工作不” t需要。replace()
似乎是一个不好的选择,因为它会遍历整个字符串寻找要被替换的多个实例。
此外,由于我的替换文本是相同的,每次,它似乎很有道理,我以其他方式写我自己的代码String.replaceFirst()
或String.replace()
会做背景中的Pattern.compile
每一次。想,我应该写我自己的代码,这是我的想法:
的期望每个面值替换(无需重新编译每一次)执行
Pattern.compile()
只有一次(即P1 - P30)然后做各的pX如下:
p1.matcher(str).replaceFirst(Matcher.quoteReplacement("desiredReplacement"));
这样,我放弃了在第一次更换船(而不是遍历整个字符串),和我使用文字与正则表达式,我没有重新编译每一个迭代。
那么,哪个性能最好?
该死的,打我吧。 @jonathon,在你知道你有性能问题之前,你没有性能问题。 – dty 2010-10-01 21:08:58
并在您的应用程序的上下文中进行测量,它可能看起来像很多工作,但它可能很容易在任何网络流量的db调用中丢失 – 2010-10-01 21:14:53