微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 基于正则表达式替换的效率

以下哪项更有效,更好用?

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

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

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

但是,如果我正在查看字符串被替换的字符串,那该怎么办?
第二个会更好吗?

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

V.S.

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

如果这对于这个问题很重要,我正在使用Java.

解决方法

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

所以我们称之为regex1:

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

这个正则表达式2:

'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

尽管如此,使用PatternMatcher更复杂的正则表达式是一个更快的选择……(更多信息here).

另外,我在这个场景中推荐的另一个读物是:Optimizing Regular Expressions in Java

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐