jon*_*ree 5 java regex string performance replace
我有一个正在进行大量文本处理的类.对于每个字符串,其长度为100-> 2000个字符,我正在执行30个不同的字符串替换.
例:
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;
}
Run Code Online (Sandbox Code Playgroud)
'foo','baz'和所有其他"目标"只会出现一次,并且是字符串文字(不需要实际的正则表达式).
你可以想象,我关注性能:)
鉴于这种,
replaceFirst()似乎是一个糟糕的选择,因为它不会使用Pattern.LITERAL,并将进行不需要的额外处理.
replace() 似乎是一个糟糕的选择,因为它将遍历整个字符串,寻找要替换的多个实例.
另外,由于我的替换文本每次都是相同的,所以我似乎有意义地编写自己的代码,String.replaceFirst()或者在后台每次都String.replace()做Pattern.compile一次.我想我应该编写自己的代码,这是我的想法:
每个文字替换Pattern.compile() 只需执行一次(无需每次重新编译)(即p1 - p30)
然后为每个pX执行以下操作: p1.matcher(str).replaceFirst(Matcher.quoteReplacement("desiredReplacement"));
这样我放弃第一次替换(不是遍历整个字符串),我使用文字与正则表达式,我不是每次迭代都重新编译.
那么,哪种性能最佳?
那么,哪个性能最好?
测量一下!;-)
ETA:由于两个词的答案听起来无可挽回的尖酸刻薄,所以我会稍微详细说明一下。“测量它并告诉我们......”因为您引用的各种方法(所有好的方法)的性能可能有一些一般的经验法则,但我不知道。正如对此答案的一些评论所提到的,即便如此,不同的方法很可能会被应用程序环境淹没。因此,请在体内进行测量,如果确实存在问题,请重点关注这一点。(并让我们知道进展如何......)