2012-08-13 10 views
10

Powiel możliwe:
Is there a good way to have a Map<String, ?> get and put ignoring case?Jak zignorować wielkość liter, gdy szukamy klucza na mapie?

Jak ignorować wielkość liter, szukając klucza w java.util.Map?

Chcę wiedzieć, czy możemy wyszukać klucz w mapie, ignorując przypadek.

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

Dane wejściowe użytkownika mogą być "ONE" lub "one". w takim przypadku zamiast konwertowania danych wprowadzanych przez użytkownika na małe litery. czy istnieje jakikolwiek sposób, aby zignorować kluczowe wrażliwe za pomocą dowolnych metod?

Dzięki, Kathir

Odpowiedz

55

Dlaczego nie użyć TreeMap zamiast HashMap, a następnie można określić komparator z przypadkiem niewrażliwego kolejności (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")); 
} 

Wyjścia:

2 
3 
+2

to naprawdę dobrze wygląda i świetnie ... Thanks a lot ... – Kathir

+1

wydajność HashMap jest O (1) i wydajność TreeMap O (log (n)) odczytać to pytanie http://stackoverflow.com/questions/2889777/difference-between-hashmap-linkedhashmap-and-treemap –

2

HashMap używa kluczaMetoda(w połączeniu z hashCode()) i String.equals() uwzględnia wielkość liter. Jeśli więc potrzebujesz klucza niewrażliwego na wielkość liter, musisz zdefiniować własną klasę klucza za pomocą odpowiedniego equals() i. W sumie jest prawdopodobnie łatwiejsze użycie toLowerCase() na wszystkich ciągach kluczy.

+0

Czy możesz podać jakieś wsparcie dla swojej odpowiedzi? Na przykład. link itp. Dzięki – georger

Powiązane problemy