2013-03-07 28 views
6

array.contains()メソッドに検索の大文字小文字を区別しないように何とか伝えることはできますか?配列には大文字と小文字を区別しない検索が含まれていますか?

List<String> data = Arrays.asList(
    "one", Two", "tHRee"); //lots of entries (100+) 

data.contains("three"); 
+1

が含まれている 'List.contains()' – m0skit0

+1

data' 'へと見上げ前に挿入する前に、小文字にすべてを変換しますか? – NPE

+0

http://stackoverflow.com/questions/8751455/arraylist-contains-case-sensitivity –

答えて

17

containsオブジェクトがリストに存在するかどうかをチェックするだけです。したがって、ここでは大文字と小文字を区別しない検索はできません。なぜなら、 "three"は "three"とは異なるオブジェクトだからです。これを解決する

単純なアプローチが

public boolean containsCaseInsensitive(String s, List<String> l){ 
    for (String string : l){ 
     if (string.equalsIgnoreCase(s)){ 
      return true; 
     } 
    } 
    return false; 
    } 

、その後

containsCaseInsensitive("three", data); 

Javaの8+バージョンのようになります。

public boolean containsCaseInsensitive(String s, List<String> l){ 
     return l.stream().anyMatch(x -> x.equalsIgnoreCase(s)); 
    } 
+0

@ mememound - このシナリオではどのようにしてequalsIgnoreCaseを使用しましたか? –

0

それはあなた自身の方法を書いて頂きます。カスタムため ポインタ:

  1. 反復リスト内のすべての要素を超えます。
  2. 比較大文字と小文字を区別しないが、パラメータと現在の要素の両方にtoLowerCaseメソッドまたはtoUpperCaseのいずれかを適用してくださいするために
  3. 内のすべての値をパラメータ文字列を比較します。

    リストのリスト; 公共ブールは、(文字列str){私はあなたが意味推測

    for(int i=0;i<list.size();i++){ 
         if(list.elementAt(i).toLowerCase().Equals(str.toLowerCase())) return true; 
        } 
    return false; 
    } 
    
+1

効率的な答えではありません。 'str'を小文字のN回(' list'の各要素に対して1回)に変換しています。このメソッドを呼び出すたびに 'list'の各項目を小文字に変換しています。あなた自身のメソッドを書くのに苦労するなら、 'equalsIgnoreCase'を使い、すべての割り当てをスキップしてください。 –

関連する問題