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

nar*_*esh 4 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");
        }   
Run Code Online (Sandbox Code Playgroud)

它工作正常.但是在下面的示例中它失败了.如何在不使用循环的情况下完成.示例:列表包含:"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.");
   }
}
Run Code Online (Sandbox Code Playgroud)

ass*_*ias 11

您可以TreeSet使用忽略大小写的自定义Comparator 将所有字符串放入a :

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
Run Code Online (Sandbox Code Playgroud)

对于更复杂的策略/区域设置,您还可以使用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"));
Run Code Online (Sandbox Code Playgroud)

  • 已经在String中定义了这样的比较器; `String.CASE_INSENSITIVE_ORDER` (2认同)

Pet*_*rey 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");
}   
Run Code Online (Sandbox Code Playgroud)