当前位置: 首页 > 面试题库 >

字符串replaceAll()与Matcher replaceAll()(性能差异)

欧阳俊捷
2023-03-14
问题内容

一个非常简单的问题,但这是来自C / C ++人员进入Java的复杂性的。

我知道我可以启动jUnit和自己的一些性能测试来获得答案。但我只是想知道这是否在那里。

在性能方面,String.replaceAll()和Matcher.replaceAll()(在从Regex.Pattern创建的Matcher对象上)之间是否存在已知差异?

此外,两者在高级API方面的区别是什么?(不可变性,处理NULL,处理空字符串,煮咖啡等)


问题答案:

根据的文档String.replaceAll,关于调用该方法有以下说法:

这种形式的方法的调用str.replaceAll(regex, repl) 产生与表达式完全相同的结果

Pattern.compile(regex).matcher(str).replaceAll(repl)

因此,可以预期在调用String.replaceAll和显式创建Matcher和之间的性能Pattern应该是相同的。

编辑

正如评论中指出的那样,对于replaceAllfrom
String或的单个调用将不存在性能差异Matcher,但是,如果需要对进行多次调用replaceAll,则可以认为保留已编译的对象将是有益的。Pattern,因此不必每次都执行相对昂贵的正则表达式模式编译。



 类似资料:
  • 除了后面使用正则表达式之外,java.lang.String的和方法有什么区别?对于简单的替换,如将替换为,有什么区别吗?

  • 问题内容: 我希望将文本“REPLACEME”替换为我的StringBuffer符号。当我打印符号时,它是一个有效的字符串。当我打印查询时,它仍然具有文本REPLACEME而不是符号。为什么? 问题答案: 更改 至: Java中的字符串被设计为不可变的。 这就是为什么不能替换当前字符串 中 的字符,因此它必须返回替换了字符的 新 字符串。 此外,如果你想简单地替换文字,不需要正则表达式的语法支持使

  • 问题内容: 线 打印一个反斜杠()。和 打印双反斜杠()。明白了! 但是为什么在以下代码中: 是输出: 代替 毕竟,该方法是将点()替换为()。 有人可以解释一下吗? 问题答案: 使用正则表达式替换字符时,您可以使用反向引用,例如使用匹配项中的分组替换。 但是,这意味着反斜杠是一个特殊字符,因此,如果您实际上想使用反斜杠,则必须对其进行转义。 这意味着在Java字符串中使用它时实际上需要对其进行两

  • 问题内容: 在Java和C#之类的语言中,字符串是不可变的,并且一次建立一个字符的字符串在计算上是昂贵的。在上述语言中,有一些库类可以降低这种成本,例如C#和Java 。 php(4或5;我对两者都感兴趣)是否都共享此限制?如果是这样,是否有类似的解决方案? 问题答案: 不,在PHP中没有stringbuilder类的类型,因为字符串是可变的。 话虽如此,根据您在做什么,有不同的方式来构建字符串。

  • 本文向大家介绍Java字符串replace(),replaceFirst()和replaceAll()方法,包括了Java字符串replace(),replaceFirst()和replaceAll()方法的使用技巧和注意事项,需要的朋友参考一下 该方法 String类的replace()方法接受两个String值- 一个表示要替换的String(子字符串)部分。 另一个代表需要替换指定子字符串的

  • Mocha支持断言库中任何抛出的s err.expected和err.actual属性AssertionError。mocha将尝试显示预期内容与断言实际看到的内容之间的差异。这是一个“字符串”差异的例子: