String replaceAll() 与 Matcher replaceAll()(性能差异)

新手上路,请多包涵

String.replaceAll() 和 Matcher.replaceAll() (在从 Regex.Pattern 创建的匹配器对象上)在性能方面是否存在已知差异?

另外,两者之间的高级 API 有何不同? (不变性、处理 NULL、处理空字符串等)

原文由 SuPra 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

根据 String.replaceAll 的文档,关于调用该方法有以下说明:

调用此形式的方法 str.replaceAll(regex, repl) 产生与表达式完全相同的结果

Pattern.compile(regex).matcher(str).replaceAll(repl)

因此,可以预期调用 String.replaceAll 和显式创建 MatcherPattern 之间的性能应该相同。

编辑

正如评论中所指出的那样,对于来自 StringMatcher -a 的一次调用 replaceAll 的性能差异是不存在的,但是,如果需要对 replaceAll 执行多次调用,人们会期望保留已编译的 Pattern 是有益的,因此不必执行相对昂贵的正则表达式模式编译每次。

原文由 coobird 发布,翻译遵循 CC BY-SA 2.5 许可协议

String.replaceAll() 的源代码:

 public String replaceAll(String regex, String replacement) {
    return Pattern.compile(regex).matcher(this).replaceAll(replacement);
}

它必须首先编译模式 - 如果您要在短字符串上使用相同的模式多次运行它,如果您重用一个已编译的模式,性能会好得多。

原文由 Michael Borgwardt 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题