java - String#replaceAll 与 StringUtils#replace()
问题描述
有任何理由使用String.replaceAll(String,String)
而不是StringUtils.replace()
根本吗?
假设这两个库都可用并且我们没有传入正则表达式。
从关于这个主题的前几篇文章中,我看到有多个测试和基准表明这String.replace
很慢,但我不记得有人解释过是否有使用String.replaceAll
overStringUtils.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
总是将搜索词解析为正则表达式并假设它也使用正则表达式函数来执行替换,因此在不实际使用正则表达式的情况下使用此方法根本没有意义。
如果您只想做一个简单的文本替换,您只需使用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 版本中缺少类似的方法
推荐阅读
- angular - Angular 10 输入值绑定由 jquery.val() 更改
- typescript - Typescript getter 类型推断
- perforce - 在 perforce 上搁置和提交有什么区别?
- python - 从 Pandas 数据框中的列表中返回匹配元素
- javascript - 如何将数据发送到工厂服务并设置为参数值?
- java - 如何使用 exoplayer 通过标签播放媒体?
- javascript - lodash Left 连接两个对象
- shell - 如何使用 xmlstarlet 从 xml 打印属性值?
- blazor - Blazor 和谷歌 sitemap.xml
- docker - 使用本地包为 dart 应用程序构建 docker 映像