首页 > 解决方案 > String#replaceAll 与 StringUtils#replace()

问题描述

有任何理由使用String.replaceAll(String,String)而不是StringUtils.replace()根本吗?

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

从关于这个主题的前几篇文章中,我看到有多个测试和基准表明这String.replace很慢,但我不记得有人解释过是否有使用String.replaceAlloverStringUtils.replace

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

标签: javaperformancereplace

解决方案


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

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

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

这将输出

Smith, John

你不能用StringUtils.replace.

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

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

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

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

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


推荐阅读