2012-08-13 3 views
10

Mögliche Duplizieren:
Is there a good way to have a Map<String, ?> get and put ignoring case?Wie kann ich Groß-/Kleinschreibung ignorieren, wenn wir in der Map nach einem Schlüssel suchen?

Wie Groß- und Kleinschreibung ignorieren, wenn ein Schlüssel in der java.util.Map gesucht?

Ich möchte wissen, ob wir nach einem Schlüssel in der Karte suchen können, indem Sie den Fall ignorieren.

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

Die Benutzereingabe könnte "EIN" oder "Eins" sein. in diesem Fall, anstatt die Benutzereingabe in Kleinbuchstaben zu konvertieren. Gibt es irgendeine Möglichkeit, den Schlüssel empfindlich über irgendwelche Methoden zu ignorieren?

Danke, Kathir

Antwort

55

Warum nicht ein TreeMap statt HashMap verwenden, dann könnten Sie einen Komparator mit einem Groß- und Kleinschreibung Ordnung (String.CASE_INSENSITIVE_ORDER) angeben:

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

Ausgänge:

2 
3 
+2

Das ist wirklich gut aussieht und toll ... Vielen Dank ... – Kathir

+1

Hashmap Leistung ist O (1) & TreeMap Leistung O (log (n)) diese Frage lesen http://stackoverflow.com/questions/2889777/difference-between-hashmap-linkedhashmap-and-treemap –

2

HashMap verwendet den Schlüssel equals(Object)-Methode (in Kombination mit hashCode()) und String.equals() ist Groß-und Kleinschreibung. Wenn Sie also einen Schlüssel ohne Berücksichtigung der Groß-/Kleinschreibung verwenden möchten, müssen Sie Ihre eigene Schlüsselklasse mit einem geeigneten equals() und hashCode() definieren. Insgesamt ist es möglicherweise einfacher, toLowerCase() für alle Schlüsselzeichenfolgen zu verwenden.

+0

Können Sie bitte etwas Unterstützung für Ihre Antwort geben? Z.B. ein Link usw. Danke – georger

Verwandte Themen