字符串替换All() vs. Matcher replaceAll() (性能差异)
2022-08-31 16:18:28
String.replaceAll() 和 Matcher.replaceAll() (在从 Regex.Pattern 创建的 Matcher 对象上)在性能方面是否存在已知的差异?
另外,两者之间的高级API有什么区别?(不可变性、处理 NULL、处理空字符串等)
String.replaceAll() 和 Matcher.replaceAll() (在从 Regex.Pattern 创建的 Matcher 对象上)在性能方面是否存在已知的差异?
另外,两者之间的高级API有什么区别?(不可变性、处理 NULL、处理空字符串等)
根据 String.replaceAll
的文档,它有以下关于调用该方法的说法:
调用这种形式的方法会产生与表达式完全相同的结果
str.replaceAll(regex, repl)
Pattern.compile(regex).matcher(str).replaceAll(repl)
因此,可以预期调用 和显式创建匹配器
和模式
之间的性能应该是相同的。String.replaceAll
编辑
正如注释中所指出的,不存在的性能差异对于单个调用 from 或 是真的,但是,如果需要执行多个调用 ,人们会期望保留编译的 ,因此不必每次都执行相对昂贵的正则表达式模式编译。replaceAll
String
Matcher
replaceAll
Pattern
源代码 :String.replaceAll()
public String replaceAll(String regex, String replacement) {
return Pattern.compile(regex).matcher(this).replaceAll(replacement);
}
它必须首先编译模式 - 如果您要在短字符串上使用相同的模式多次运行它,那么如果您重用一个已编译的模式,性能将会好得多。