有什么理由使用String.replaceAll(String,String)
而不是StringUtils.replace()
吗?
假设两个库都可用,并且我们没有传入正则表达式。
从之前关于这个主题的几篇文章中,我看到有多个测试和基准指向String.replace
很慢,但我不记得有人解释是否有理由使用String.replaceAll
而不是StringUtils.replace
基准测试来源:Commons Lang StringUtils.replace performance vs String.replace
String.replaceAll
和StringUtils.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 版本中缺乏类似的方法