![]() |
1
71
根据文件
因此,可以预期在调用
编辑
正如在评论中所指出的,性能差异不存在对于
|
![]() |
2
22
源代码
它必须首先编译模式——如果您要在短字符串上用相同的模式多次运行它,那么如果您重用一个已编译的模式,性能会更好。 |
![]() |
3
9
主要的区别是如果你抓住
如果每次都有不同的regex,请使用
|
![]() |
4
6
不可变/线程安全:编译的模式是不可变的,匹配器不是。(见 Is Java Regex Thread Safe? ) 处理空字符串:replaceall应优雅地处理空字符串(它与空输入字符串模式不匹配) 制作咖啡等:我最后听说,无论是字符串、模式还是Matcher都没有任何API特性。 编辑:关于处理空值,字符串和模式的文档没有明确地这么说,但是我怀疑他们会抛出nullpointerException,因为他们需要一个字符串。 |
![]() |
5
4
实施
(医生也这么说。)
虽然我没有检查缓存,但我当然希望编译一个模式
一旦
保持对它的静态引用比调用
|
![]() |
6
4
不同的是,每次调用regex时,string.replaceall()都会编译它。没有与.NET的静态regex.replace()方法等效的方法,该方法自动缓存已编译的regex。通常,replaceall()只能执行一次,但如果要用同一个regex重复调用它,尤其是在循环中,则应创建一个模式对象并使用matcher方法。 您也可以提前创建matcher,并使用其reset()方法为每次使用重新定位它:
当然,重用Matcher的性能优势远不及重用模式。 |
![]() |
7
0
其他答案充分涵盖了操作的性能部分,但是
这个
您还可以设置其他标志。我只是想指出
|