13

重複の可能性:
大文字と小文字を無視して Map<String, ?> を get および put する良い方法はありますか?

java.util.Map でキーを検索するときに大文字と小文字を区別しないようにするにはどうすればよいですか?

大文字と小文字を区別せずにマップ内のキーを検索できるかどうかを知りたいです。

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

ユーザー入力は、「ONE」または「one」の場合があります。このような場合、ユーザー入力を小文字に変換する代わりに。何らかの方法で機密キーを無視する方法はありますか?

ありがとう、カシール

4

2 に答える 2

60

TreeMapの代わりにa を使用しない理由はHashMap、大文字と小文字を区別しない順序 ( String.CASE_INSENSITIVE_ORDER)で Comparator を指定できることです。

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
于 2012-08-13T07:10:39.983 に答える
3

HashMapキーのequals(Object)メソッドを ( と組み合わせてhashCode())使用し、String.equals()大文字と小文字を区別します。したがって、大文字と小文字を区別しないキーが必要な場合は、適切なequals()andを使用して独自のキー クラスを定義する必要がありhashCode()ます。toLowerCase()全体として、すべてのキー文字列で使いやすい可能性があります。

于 2012-08-13T10:30:31.410 に答える