不区分大小写查找的数组包含()方法?

24

我可以通过某种方式告诉array.contains()方法不区分大小写进行查找吗?

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

data.contains("three");

1
我猜你的意思是 List.contains() - m0skit0
1
在插入到“data”之前和查找之前,将所有内容转换为小写? - NPE
7
@yaens 这是 .Net 而不是 Java。 - m0skit0
4
重复的是针对 .NET 而非 Java 的,请停止投票 :X - Esailija
1
这不是重复的。谁应该修复这个问题? - Ernestas Gruodis
显示剩余2条评论
2个回答

50

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

@membersound - 你是如何在这种情况下使用equalsIgnoreCase的? - Tim Boland
@KishanSolanki - 我非常确定它可以工作。你遇到了什么问题? - Averroes

-1

这将需要您编写自己的contains()方法。 自定义contains()的指针:

  1. 遍历列表中的所有元素。
  2. 将参数字符串与所有值进行比较
  3. 为了使比较不区分大小写,请确保在参数和当前元素上应用toLowerCase或toUpperCase中的任何一个。

    List list; public boolean contains(String str){

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

3
这不是一个高效的答案。你正在将 str 转换为小写 N 次(每个 list 的元素转换一次),并且每次调用此方法时都会将 list 中的每个项转换为小写。如果你要费心编写自己的方法,请使用 equalsIgnoreCase 并跳过所有分配。 - John Hart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接