String#replaceAll vs StringUtils#replace()



有什么理由使用String.replaceAll(String,String)而不是StringUtils.replace()吗?

假设两个库都可用,并且我们没有传入正则表达式。

从之前关于这个主题的几篇文章中,我看到有多个测试和基准指向String.replace很慢,但我不记得有人解释是否有理由使用String.replaceAll而不是StringUtils.replace

基准测试来源:Commons Lang StringUtils.replace performance vs String.replace

String.replaceAllStringUtils.replace(假设这里的Apache Commons)是两个完全不同的野兽。前者使用正则表达式作为搜索词,并在支持正则表达式的情况下执行替换,后者只是查找给定文本的出现次数并将其替换为替换文本。

使用String.replaceAll,您可以例如执行以下操作:

System.out.println("John Smith".replaceAll("^(S+)s*(S+)*$", "$2, $1"));

将输出

Smith, John

你不能用StringUtils.replace做到这一点.

假设两个库都可用,并且我们没有传入正则表达式。

String.replaceAll总是将搜索词解析为正则表达式,并假设它也使用正则表达式函数来执行替换,因此在不实际使用正则表达式的情况下使用此方法根本没有意义。

如果你只想做一个简单的文本替换,你只需使用Java 1.5添加的String.replace(CharSequence c1, CharSequence c2)

从之前关于这个主题的几篇文章中,我看到有多个测试和基准指向该 String.replace

有些来源会很好,你已经看到了这个声明。Nexevis 提供的链接涵盖了 Java 1.4,其中上述方法不存在,并且 - 现在没有自己做一些测试 - 我怀疑String.replace(CharSequence...)StringUtils.replace之间的性能差异很大StringUtils因为 ' 实现看起来非常简单,并且很可能与 JVM 中的实现没有太大区别。它的存在纯粹是历史的,因为在 1.5 之前的 Java 版本中缺乏类似的方法

最新更新