4

以下哪项会更有效和更好地使用?

value.replaceAll("['‘’`]","")

value.replaceAll("['‘’`]+","")

我的猜测是,对于没有替换字符的字符串,或者至少没有它们的序列,两者是相同的,或者第一个更好的是不那么复杂。

但是如果我正在查看确实具有被替换字符的子序列的字符串怎么办?第二个会更好吗?

'abababababababab'.replaceAll("ab","") 

对比

'abababababababab'.replaceAll("(ab)+","") 

如果这对这个 Q 很重要,我正在使用 Java。

4

1 回答 1

1

根据分析,我会说第一个选项比第二个更快。尽管我必须说除非您有一个巨大的字符串作为输入(或复杂的正则表达式),否则这种差异不容易测量。

所以让我们称之为 regex1:

'abababababababab'.replaceAll("ab","")

而这个正则表达式2:

'abababababababab'.replaceAll("(ab)+","")

我们从Java API知道replaceAll 会将条件视为正则表达式并尝试替换正则表达式引擎之后的字符串。

我们可以看到 regex1 只有 char 序列;while 和 regex2 有一个group,一个 char 序列和一个必须相应解释的量词元字符(更多信息在这里)。因此 regex2 比 regex1 需要更多的处理。

一般来说,这两种选择对于大多数用途来说都非常快。您可以通过阅读这篇文章来更详细地了解该过程:正则表达式匹配可以简单快速

尽管如此,将PatternMatcher用于更复杂的正则表达式是一个更快的选择......(更多信息在这里)。

在这种情况下,我推荐的另外一本书是:Optimizing Regular Expressions in Java

于 2012-07-03T16:56:18.013 回答