2

いくつかのif条件をチェックし、次のようにいくつかの置換操作を実行する必要がある文字列があります。

for(int i =0; i<10;i++){
    if(name[i].contains("sometext")){
       name[i] = name[i].replaceAll("someregexpattern","replacementtexthere");
    }
}

'if'条件を使用して毎回'sometext'の存在をチェックする代わりに、次のように簡単に言うことができますか?

for(int i =0; i<10;i++){
       name[i] = name[i].replaceAll("someregexpattern","replacementtexthere");
}

とにかく、文字列'name'に'regexpattern'の意味が含まれていない場合、それは何も置き換えません。したがって、if条件はパフォーマンスの観点から重要です。

前もって感謝します。

4

3 に答える 3

2

sometextこれは、がと同じである場合にのみ有効になりますsomeregexpattern。そうでなければ、if条件は重要です。

あなたsomeregexpatternが実際に文字列に存在しているとしましょう。しかし、あなたのif状態は評価されfalseます。その場合、あなたは交換を行うことになっていないのです。ただし、ステートメントを削除するifと、置換が発生しますが、これはまったく同じではありません。

例:-理解を深めるのに役立ちます。

String testCondition = "dontReplace";
        String myString = "Hi, I'm SO";
        String regex = "SO";
        String replacement = "Not SO";

        if(myString.contains(testCondition)){
            myString = myString.replaceAll(regex, replacement); // stays "Hi, I'm SO"
        }

        myString = myString.replaceAll(regex, replacement); // Becomes "Hi, I'm Not SO"

ご覧のとおり、String条件があったために交換が行われないようにする必要がdontReplaceありましたが、ifが削除されたため、想定されていなかったにもかかわらず、交換が行われました。

于 2013-03-26T10:01:26.737 に答える
0

「If」自体はパフォーマンスに影響しません。最近の関数呼び出しはかなり安価ですが、String.contains()はさらに4〜5回の関数呼び出しを実行します。

ただし、前者のバリアントは読みやすく、バグが発生しにくいです。

于 2013-03-26T10:07:51.923 に答える
0

「パフォーマンスの観点からの重要性」は、そのすべてがソフトウェアで実行される頻度にも依存します。

プロファイラーの実行(visualvmなどを介して)は、実行時間のかなりの部分がに費やされているかどうかを示しますString#replaceAll()。そうでない場合は、最適化しても大幅な改善は得られません。当たり前のように聞こえますが、忘れられがちです。

また、最適化によって大きなメリットが得られない場合は、ほとんどの場合、コードのより読みやすいバリアントを選択する方がよいでしょう。

于 2013-03-26T10:28:45.410 に答える