4

次のうちどれがより効率的で使用するのが良いでしょうか?

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

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

私の推測では、文字が置き換えられていない文字列、または少なくともそれらのシーケンスがない文字列の場合、2つは同じであるか、最初の文字列の方が複雑ではない方がよいでしょう。

しかし、文字のサブシーケンスが置き換えられている文字列を見ている場合はどうなりますか?2番目の方が良いでしょうか?

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

vs

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

このQのためにこれが重要な場合、私はJavaを使用しています。

4

1 に答える 1

1

分析によると、最初のオプションは2番目のオプションよりも高速です。入力として巨大な文字列(または複雑な正規表現)がない限り、この違いを簡単に測定することはできません。

それでは、これをregex1と呼びましょう。

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

そしてこのregex2:

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

Java APIから、replaceAllは条件を正規表現として認識し、正規表現エンジンに続く文字列を置き換えようとすることがわかっています。

regex1にはcharシーケンスのみがあることがわかります。一方、regex2には、グループ、charシーケンス、およびそれに応じて解釈する必要のある数量詞メタ文字があります(詳細はこちら)。したがって、regex2はregex1よりも多くの処理を必要とします。

一般に、どちらのオプションもほとんどの用途で非常に高速です。この記事を読むことで、プロセスの詳細を知ることができます:正規表現のマッチングはシンプルかつ高速になります

それでも、より複雑な正規表現にパターンマッチャーを使用する方が高速なオプションです...(詳細はこちら)。

また、このシナリオで私がお勧めする追加の読み物は次のとおりです。Javaでの正規表現の最適化

于 2012-07-03T16:56:18.013 に答える