小编jon*_*ree的帖子

Java的String.replace()与String.replaceFirst()与homebrew

我有一个正在进行大量文本处理的类.对于每个字符串,其长度为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"));

这样我放弃第一次替换(不是遍历整个字符串),我使用文字正则表达式,我不是每次迭代都重新编译.

那么,哪种性能最佳?

java regex string performance replace

5
推荐指数
1
解决办法
2123
查看次数

标签 统计

java ×1

performance ×1

regex ×1

replace ×1

string ×1