4

こんにちは、文字列値を格納する配列リストがあります。リストに文字列が存在するかどうかを確認したい。ここでは、大文字と小文字を区別しないようにします。

コード

public static ArrayList< String > arrFoodItems = new ArrayList< String >();

if(arrFoodItems.contains("string"))

        {
            System.out.println("already available in the List.");
        }
        else
        {
            System.out.println("Not available");
        }   

それはうまくいっています。しかし、次の例では失敗します。ループを使わずにそれを行う方法。例: リストに含まれるもの: "Rice, Chicken,..." これで、"rice" がリストに存在するかどうかを確認できます。この場合、「存在しません」と表示されます。

これを使用しないでください

for(int i=0; i < arrFoodItems.size(); i++)
{

   if(arrFoodItems.get(i)..equalsIgnoreCase(string))
   {
        System.out.println("already available in the List.");
   }
}
4

4 に答える 4

11

TreeSet大文字と小文字を区別しないカスタム Comparator を使用して、すべての文字列を に入れることができます。

List<String> list = Arrays.asList("Chicken", "Duck");
Set<String> set=  new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
set.addAll(list);
System.out.println(set.contains("Chicken")); //true
System.out.println(set.contains("chicken")); //true

より複雑な戦略/ロケールについては、Collat​​or を使用することもできます。

final Collator ignoreCase = Collator.getInstance();
ignoreCase.setStrength(Collator.SECONDARY);

List<String> list = Arrays.asList("Chicken", "Duck");
Set<String> set=  new TreeSet<String>(new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
        return ignoreCase.compare(o1, o2);
    }
});
set.addAll(list);
System.out.println(set.contains("Chicken"));
System.out.println(set.contains("chicken"));
于 2012-08-31T11:39:53.583 に答える
5

要素をループすることは、contains が行うことなので、ループを使用したくない場合は、ArrayList を使用しないことをお勧めします。

別のコレクションを使用せずに、最良のオプションは使用することです

FOUND: {
    for(String item: arrFoodItems) {
       if (item.equalsIgnoreCase(string)) {
          System.out.println(string+" already available in the List.");
          break FOUND;
       }
    }
    System.out.println(string + " not available");
}   
于 2012-08-31T11:44:15.283 に答える
3

コンパレーターを提供できる Collections.binarySearch 静的メソッドを使用できます (この場合は String.CASE_INSENSITIVE_ORDER)

List<String> list = new ArrayList<String>();
list.add("Joe");
Collections.binarySearch(list, "joe", String.CASE_INSENSITIVE_ORDER); // return 0

お役に立てれば!

于 2012-08-31T12:08:06.737 に答える
2

以下のようにメソッドを記述してCustomArrayListオーバーライドしないでください。の代わりにcontains使用できるようになりました。CustomArrayListArrayList

例:

public class CustomArrayList extends ArrayList<String> {
    @Override
    public boolean contains(Object o) {
        String str = (String)o;
        for (String s : this) {
            if (str.equalsIgnoreCase(s)) return true;
        }
        return false;
    }

    @Test
    public static void main(String[] args) {

        List<String> myList=new CostumArrayList();
        myList.add("Amit");

        System.out.println(myList.contains("AMIT"));
        System.out.println(myList.contains("amit"));
    }
}
于 2012-08-31T11:48:57.500 に答える