Как игнорировать регистр, чувствительный, когда мы ищем ключ на Карте?

Возможный дубликат:
Есть ли хороший способ иметь карту <String,?> Получить и положить игнорировать случай?

Как игнорировать регистр, чувствительный при поиске ключа в java.util.Map?

Я хочу знать, можем ли мы искать ключ на карте, игнорируя случай.

Example,
   Map<String, Integer> lookup = new HashMap<String, Integer>();   
   lookup.put("one", 1);   
   lookup.put("two", 2);   
   lookup.put("three", 3); 

Пользовательский ввод может быть "ОДИН" или "один". в таком случае вместо преобразования пользовательского ввода в нижний регистр. есть ли способ игнорировать ключ, чувствительный с помощью любых методов?

Спасибо, Катир

Ответ 1

Почему бы не использовать TreeMap вместо HashMap, тогда вы можете указать Компаратор с регистром без String.CASE_INSENSITIVE_ORDER регистра ( String.CASE_INSENSITIVE_ORDER):

public static void main(String[] args) throws Exception {

    Map<String, Integer> lookup = 
        new TreeMap<String, Integer>(String.CASE_INSENSITIVE_ORDER);

    lookup.put("One", 1);
    lookup.put("tWo", 2);
    lookup.put("thrEE", 3);

    System.out.println(lookup.get("Two"));
    System.out.println(lookup.get("three"));
}

Выходы:

2
3

Ответ 2

HashMap использует метод equals(Object) ключа (в сочетании с hashCode()), а String.equals() чувствителен к регистру. Поэтому, если вы хотите использовать нечувствительный к регистру ключ, вы должны определить свой собственный класс ключей с надлежащими equals() и hashCode(). В целом, возможно, проще использовать toLowerCase() для всех ключевых строк.