2012-04-16 21 views
2

非常に長いIfElseを使用しているときに、これを行う最善の方法はどれですか?IfElseまたはregex

 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 
     } 

そして私はあなたがこれらの多くをチェックする必要があるときにだけ意味。ありがとう!

答えて

0

通常elseIf長い文がcase文に置き換えられ、これは常に可能なわけではありません。もし私がお勧めするなら、私は2番目のオプションに行くだろう。オプション1は、同じことをするIf else if elseステートメントの束を与えるだろう.3番目のケースでは、正規表現はかなりかなり大きく成長する傾向がある。

また、alotの量によっては、データ構造内のすべての文字列をスローし、繰り返してその要素がその中にあるかどうかを確認することができます。

0
String[] storage = { 
    "text", 
    "foo", 
    "bar", 
    "more text" 
}; 

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

これは役に立ちますか?あなたは、コンパクトな、それが好きなら

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

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

をそして、あなたも書くことができます:

4

(1)私は個人的に私は読みやすいと思いとしてセットを使用するとcontainsはOで効率的になります

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

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

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

EDIT
、どのような上記ではtext.equals("xxx")、ないtext.contains("xxx")と条件を使用することと等価であることは事実です。あなたが本当に含まれている使用することを意図している場合、あなたはセットを反復処理し、各文字列をテストする必要がありますが、それはO(n)の動作となります:

for (String key : keywords) { 
    if (text.contains(key)) { 
     //do your stuff 
     break; 
    } 
} 
+0

私は、セットが内部的にバイナリツリーとして格納されているので、実際はO(log n)だと思います。しかし、HashTableはO(1)の効率を償却しています。 –

+1

javadocから: "このクラスは、ハッシュ関数がバケット間で要素を適切に分散させると仮定して、基本的な操作(追加、削除、包含、およびサイズ)の一定の時間パフォーマンスを提供します" - Stringsの場合に該当します。 – assylias

+0

私の悪いです。私はそれらをC++セットと混同していました。これは "通常バイナリ検索ツリーとして実装されています"です。 –

関連する問題