2

IfElse が非常に長い場合にこれを行うには、次のうちどれが最適ですか?

        if (text.contains("text"))
        {
            // do the thing
        }
        else if (text.contains("foo"))
        {
            // do the thing
        }
        else if (text.contains("bar"))
        {
            // do the thing
        }else ...

または

        if (text.contains("text") || text.contains("foo") || ...)
        {
            // do the thing
        }

または多分

        Pattern pattern = Pattern.compile("(text)|(foo)|(bar)|...");
        Matcher matcher = pattern.matcher(text);
        if(matcher.find())
        {
            // do the thing
        }

そして、これらの多くをチェックする必要がある場合にのみ意味します. ありがとう!

4

3 に答える 3

4

contains読みやすく、O(1) で効率的であると思うので、私は個人的にセットを使用します。

Set<String> keywords = new HashSet<String>();
keywords.add("text");
keywords.add("foo");
keywords.add("bar");

if(keywords.contains(text)) {
    //do your thing
}

コンパクトにしたい場合は、次のように書くこともできます。

Set<String> keywords = new HashSet<String>(Arrays.asList("text", "foo", "bar"));

if(keywords.contains(text)) {
    //do your thing
}

最後に、常に同じリストを使用する場合はprivate static final、メソッドを実行するたびに再作成する代わりに、キーワードを作成できます。

EDITコメントに続いて、上記の内容が条件を with , not
で使用することと同等であることは事実です。本当に contains を使用するつもりなら、セットを反復処理して各文字列をテストする必要がありますが、それは O(n) 操作になります。text.equals("xxx")text.contains("xxx")

for (String key : keywords) {
    if (text.contains(key)) {
        //do your stuff
        break;
    }
}
于 2012-04-16T12:57:09.553 に答える
0
String[] storage = {
    "text",
    "foo",
    "bar",
    "more text"
};

for(int i=0; i < storage.length(); i++){
    //Do Something
}

これは役に立ちますか?

于 2012-04-16T12:56:30.083 に答える
0

通常、長いIf elseステートメントはステートメントに置き換えられますcaseが、これが常に可能であるとは限りません。どこを推奨するかというと、2 番目のオプションを選択します。オプション 1 はIf else if else同じことを行う一連のステートメントを提供しますが、3 番目のケースでは、正規表現は非常に急速に大きくなる傾向があります。

繰り返しますが、どれだけalotあるかにもよりますが、最終的には、すべての文字列をデータ構造にスローし、それを繰り返し処理して、要素がその中にあるかどうかを確認する方がよい場合があります。

于 2012-04-16T12:58:35.653 に答える