ArrayList和contains()方法 - 不区分大小写

3
我希望ArrayList中的contains()方法不区分大小写。有什么办法吗?谢谢。
3个回答

8
不行,你需要定义自己的contains方法,它必须在ArrayList中迭代,并使用String类的equalsIgnoreCase方法比较值。
编辑:不想无礼,但问题很清楚:这个人想要使用contains方法。因此,他不能/不应该在添加元素之前使用toLowerCase,原因有很多:例如,他可能需要原始字符串(而不是小写的字符串)。另外,由于我们正在谈论contains方法,所以我们关注的是元素而不是它们的索引(如几分钟前有人回答的那样)。

2

正如 @Cristian 所说,没有本地方法可以实现这一点。我想发布我写的小实用程序方法,以防它是一个有用的复制和粘贴:

public static boolean ContainsCaseInsensitive(ArrayList<String> searchList, String searchTerm)
{
    for (String item : searchList)
    {
        if (item.equalsIgnoreCase(searchTerm)) 
            return true;
    }
    return false;
}

在 Kotlin 中:private fun containsCaseInsensitive(searchList: ArrayList, searchTerm: String): Boolean { for (item in searchList) { if (item.equals(searchTerm, ignoreCase = true)) { return true } } return false } - fattire
实际上,在上面的代码中,使用"searchList.forEach { item ->"可能比"for (item in searchList) {"更安全,因为显然这种方式使用了迭代器,可以避免潜在的ConcurrentModificationException异常。 - fattire

1

我曾经遇到过这样的问题,我使用了二分查找的解决方法,似乎很有效:

ArrayList al= new ArrayList();
al.Add("Elem1");
al.Add("Elem5");
al.Add("Elem3");
al.Sort();  

if (al.BinarySearch("elem3", new CaseInsensitiveComparer()) > 0)
      MessageBox.Show("Exists");   //this case
else
      MessageBox.Show("Not found");  

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