String.replaceAll() 和 Matcher.replaceAll() (在从 Regex.Pattern 创建的匹配器对象上)在性能方面是否存在已知差异?
另外,两者之间的高级 API 有何不同? (不变性、处理 NULL、处理空字符串等)
原文由 SuPra 发布,翻译遵循 CC BY-SA 4.0 许可协议
String.replaceAll() 和 Matcher.replaceAll() (在从 Regex.Pattern 创建的匹配器对象上)在性能方面是否存在已知差异?
另外,两者之间的高级 API 有何不同? (不变性、处理 NULL、处理空字符串等)
原文由 SuPra 发布,翻译遵循 CC BY-SA 4.0 许可协议
String.replaceAll()
的源代码:
public String replaceAll(String regex, String replacement) {
return Pattern.compile(regex).matcher(this).replaceAll(replacement);
}
它必须首先编译模式 - 如果您要在短字符串上使用相同的模式多次运行它,如果您重用一个已编译的模式,性能会好得多。
原文由 Michael Borgwardt 发布,翻译遵循 CC BY-SA 2.5 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
根据
String.replaceAll
的文档,关于调用该方法有以下说明:因此,可以预期调用
String.replaceAll
和显式创建Matcher
和Pattern
之间的性能应该相同。编辑
正如评论中所指出的那样,对于来自
String
或Matcher
-a 的一次调用replaceAll
的性能差异是不存在的,但是,如果需要对replaceAll
执行多次调用,人们会期望保留已编译的Pattern
是有益的,因此不必执行相对昂贵的正则表达式模式编译每次。