ArrayList & содержит () - без учета регистра - PullRequest
3 голосов
/ 08 июня 2010

Я хочу, чтобы метод contains () из ArrayList учитывал регистр.

Есть ли способ?

Спасибо

Ответы [ 3 ]

7 голосов
/ 08 июня 2010

Нет. Вам нужно будет определить свой собственный метод содержимого, который будет выполнять итерацию среди ArrayList, и сравнить значения, используя метод equalsIgnoreCase класса String.

Редактировать: Я не хочу быть грубым, но вопрос довольно ясен: парень хочет использовать метод contains. Поэтому он не может / должен использовать toLowerCase перед добавлением элементов по слишком многим причинам: например, ему может понадобиться исходный String (а не тот, который в нижнем регистре). Кроме того, поскольку мы говорим о методе contains, мы фокусируемся на элементах, а не на их индексах (как кто-то ответил несколько минут назад).

1 голос
/ 21 июля 2012

Как сказал @Cristian, для этого не существует нативного метода. Я думал, что выложу небольшой вспомогательный метод, который я написал, на случай, если это будет полезно копировать и вставить:

public static boolean ContainsCaseInsensitive(ArrayList<String> searchList, String searchTerm)
{
    for (String item : searchList)
    {
        if (item.equalsIgnoreCase(searchTerm)) 
            return true;
    }
    return false;
}
1 голос
/ 10 февраля 2011

У меня была такая проблема, и я использовал этот обходной путь с BinarySearch, который, кажется, работает:

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