5

一部のコードのパフォーマンスを改善しようとしています。次のようになります。

public boolean isImportant(String token) {
    for (Pattern pattern : patterns) {
        return pattern.matches(token).find();
    }
}

私が気付いたのは、パターンの多くが、正規表現構造を持たない単純な文字列リテラルのように見えることです。したがって、次のようなより高価なパターン マッチを実行する代わりに、これらを別のリスト (importantList) に単純に格納し、等価性テストを実行したいと考えています。

public boolean isImportant(String token) {
    if (importantList.contains(token)) return true;

    for (Pattern pattern : patterns) {
        return pattern.matches(token).find();
    }        
}

特定の文字列に正規表現構造が含まれていないかどうかをプログラムで判断するにはどうすればよいですか?

編集:答えはパフォーマンスに敏感である必要はないことを追加する必要があります。(つまり、正規表現を使用できます) 私は主に isImportant() のパフォーマンスに関心があります。これは、パターンの初期化が 1 回しか行われないのに対し、何百万回も呼び出されるためです。

4

4 に答える 4

1

これは間違っています

    for (Pattern pattern : patterns) 

すべてのパターンを OR する 1 つの大きな正規表現を作成する必要があります。次に、入力ごとに1回だけ一致します。

于 2013-03-05T22:55:28.840 に答える