以下哪项更有效,更好用?
value.replaceAll("['‘’`]","")
value.replaceAll("['‘’`]+","")
我的猜测是,对于没有替换字符的字符串,或者至少没有它们的序列,两者是相同的,或者第一个更好,不那么复杂。
但是,如果我正在查看确实具有被替换字符的子序列的字符串怎么办?第二个会更好吗?
'abababababababab'.replaceAll("ab","")
VS
'abababababababab'.replaceAll("(ab)+","")
如果为了这个Q而重要,我正在使用Java。
根据分析,我会说第一个选项比第二个选项更快。尽管我必须说,除非您有一个巨大的字符串作为输入(或复杂的正则表达式),否则这种差异不容易测量。
因此,让我们称之为regex1:
'abababababababab'.replaceAll("ab","")
而这个正则表达式2:
'abababababababab'.replaceAll("(ab)+","")
我们从Java API中知道,replaceAll将把条件视为正则表达式,并尝试替换正则表达式引擎之后的字符串。
我们可以看到 regex1 只有 char 序列;而 regex2 有一个组、一个 char 序列和一个量词元字符,必须相应地解释(更多信息在这里)。因此,正则表达式 2 需要比正则表达式 1 更多的处理。
一般来说,对于大多数用途来说,这两个选项都非常快。您可以通过阅读本文对该过程有更详细的了解: 正则表达式匹配可以简单快速
尽管如此,使用模式和匹配器进行更复杂的正则表达式是一个更快的选择......(更多信息在这里)。
在此场景中,我建议的其他阅读材料是:在 Java 中优化正则表达式