java - arraylist检查元素是否存在此处忽略大小写

时间:2012-08-31 11:38:14

标签: java

嗨我有arraylist它存储字符串值。我想检查列表中是否存在某些字符串。在这里,我想忽略区分大小写。

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,...” 现在你检查“米饭”是否在列表中退出。在这种情况下,我们得到“不存在”。

请勿使用此

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

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

4 个答案:

答案 0 :(得分: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"));

答案 1 :(得分:5)

循环遍历元素是包含的内容,因此如果您不想使用循环,最好不要使用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");
}   

答案 2 :(得分: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

希望这有帮助!

答案 3 :(得分:2)

为什么不写下CustomArrayList,然后覆盖contains方法,如下所示。现在,您可以使用CustomArrayList代替ArrayList

示例:

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"));
    }
}