2012-08-13 37 views
10

可能重複:
Is there a good way to have a Map<String, ?> get and put ignoring case?如何在Map中查找關鍵字時忽略大小寫?

如何尋找在java.util.Map一個鍵時忽略大小寫?

我想知道我們是否可以通過忽略情況來查找地圖中的某個鍵。

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

用戶輸入可能是「一個」或「一個」。在這種情況下,而不是將用戶輸入轉換爲小寫。是否有任何方法可以通過任何方法忽略敏感鍵?

感謝, 本Kathir

回答

55

爲什麼不使用的TreeMap代替HashMap,那麼你可以指定一個區分大小寫的順序比較(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

這看起來真的好大......非常感謝...... – Kathir 2012-08-13 07:24:34

+1

HashMap的性能是O(1)TreeMap的性能爲O(log(n))的 閱讀本題 http://stackoverflow.com/questions/2889777/hash-map-linkedhashmap-and-treemap之間的差異 – 2016-08-16 14:15:41

2

HashMap使用密鑰的equals(Object)方法(結合hashCode())和String.equals()區分大小寫。所以如果你想要一個不區分大小寫的密鑰,你必須使用正確的equals()hashCode()來定義你自己的密鑰類。總之,在所有關鍵字符串上使用toLowerCase()可能更容易。

+0

您能否爲您的答案提供一些支持?例如。鏈接等謝謝 – georger 2017-04-19 14:04:34