以下哪项更有效,更好用?
value.replaceAll("['‘’`]","")
value.replaceAll("['‘’`]+","")
我的猜测是,对于没有替换字符的字符串,或者至少没有它们的序列,两者是相同的,或者第一个更好的是不那么复杂。
但如果我正在查看字符串的子序列被替换的字符串怎么办? 第二个会更好吗?
'abababababababab'.replaceAll("ab","")
v.s。
'abababababababab'.replaceAll("(ab)+","")
如果这对于这个问题很重要,我正在使用Java。
答案 0 :(得分:1)
根据分析,我会说第一个选项比第二个更快。虽然我必须说这种差异不容易衡量,除非你有一个巨大的字符串作为输入(或复杂的正则表达式)。
所以我们打电话给这个regex1:
'abababababababab'.replaceAll("ab","")
这个正则表达式:
'abababababababab'.replaceAll("(ab)+","")
我们从Java API知道replaceAll会看到both the conditions as a regex并尝试替换正则表达式引擎之后的字符串。
我们可以看到regex1只有char序列;而且regex2有一个group,一个char序列和一个必须相应解释的quantifier metacharacters(更多信息here)。因此regex2需要比regex1更多的处理。
一般来说,对于大多数用途来说,这两个选项都非常快。通过阅读本文,您可以更详细地了解该流程:Regular Expression Matching Can Be Simple And Fast
尽管如此,使用Pattern和Matcher更复杂的正则表达式是一个更快的选择...(更多信息here)。
此方案中我建议的其他阅读材料是:Optimizing Regular Expressions in Java