String#replaceAll与StringUtils#replace()

tom*_*tom 1 java performance replace

是否有任何理由要使用String.replaceAll(String,String)而不是StringUtils.replace()全部使用?

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

从关于这一主题的几个以前的职位,我看到有多个测试和基准指着那String.replace是缓慢的,但我不记得任何人解释是否有使用的情况下,String.replaceAllStringUtils.replace

基准测试源:Commons Lang StringUtils.replace性能vs String.replace

Lot*_*har 5

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

有了String.replaceAll你可以如做这样的事情:

System.out.println("John Smith".replaceAll("^(\S+)\s*(\S+)\*$", "$2, $1"));
Run Code Online (Sandbox Code Playgroud)

将输出

Smith, John
Run Code Online (Sandbox Code Playgroud)

您无法使用来做到这一点StringUtils.replace

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

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

如果您只想进行简单的文本替换,则可以使用String.replace(CharSequence c1, CharSequence c2)Java 1.5中添加的文本替换

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

在您已看到该声明的地方,有些资料会很好。链接Nexevis只要涵盖了Java 1.4,其中上面的方法并不存在, -不现在做一些测试自己-我怀疑之间的性能String.replace(CharSequence...)StringUtils.replace差别很大,因为StringUtils“实现看起来相当简单,并且很可能不是来自差别很大在JVM中的实现。它的存在纯粹是历史性的,因为Java版本1.5之前缺少类似的方法