2012-08-13 17 views
10

Olası Çoğalt: java.util.Map bir anahtar ararken harf duyarlı görmezden Nasıl
Is there a good way to have a Map<String, ?> get and put ignoring case?Haritadaki bir anahtara baktığımızda büyük/küçük harf duyarlılığı nasıl göz ardı edilir?

?

Bu durumu göz ardı ederek haritada bir anahtar arayabilir miyim diye bilmek istiyorum.

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

Kullanıcı girişi "ONE" veya "one" olabilir. Böyle bir durumda kullanıcı girişini küçük harfe dönüştürmek yerine. Anahtarları herhangi bir yöntemle görmezden gelmenin herhangi bir yolu var mı?

sayesinde Kesir

, o zaman bir harf duyarsız düzenine sahip bir Karşılaştırıcısı ( String.CASE_INSENSITIVE_ORDER) belirtebiliriz bir TreeMap yerine HashMap ait kullanmayın Neden

cevap

55

:

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

Çıkışlar:

2 
3 
+2

Bu gerçekten iyi ve harika görünüyor ... Çok teşekkürler ... – Kathir

+1

HashMap performans (1) & TreeMap performans O (n log()) bu soru okumak http://stackoverflow.com O/questions/2889777/hashmap-linkedhashmap-ve-treemap arasındaki fark- –

2

HashMap anahtarınanahtarını kullanır.yöntemi (hashCode() ile birlikte) ve String.equals() büyük/küçük harf duyarlıdır. Büyük/küçük harfe duyarlı bir anahtar istiyorsanız, kendi anahtar sınıfınızı uygun bir equals() ve hashCode() ile tanımlamanız gerekir. Toplam olarak, tüm tuş dizgilerine toLowerCase()'u kullanmak daha kolay olacaktır.

+0

Cevabınız için biraz destek verebilir misiniz? Örneğin. bir bağlantı vb Teşekkürler – georger

İlgili konular