2015-11-20 13 views
6

ハッシュマップキーセットに 'buffSB.toString()'という文字列が含まれているかどうかを確認しようとしています。しかし、私は大文字小文字無視(大文字または小文字)を比較したいと考えました。ハッシュマップでstringとkeyvalueを比較しているときに無視する

static StringBuilder buffSB = new StringBuilder(); 

buffSB.append(alphabet); 

Map<String, String> pref = new Datamatch().main(); // Getting the Hashmap from other class 

if(pref.containsKey(buffSB.toString()))    //This is where I need to ignore case while searching string in the map key set 
    { 
     String val = pref.get(buffSB.toString()); 
    } 

ご協力いただきますようお願い申し上げます。

答えて

1

あなたはHashMapのgetKeyメソッドの実装を参照してください場合は、ハッシュ値を生成し、そのバケットからの実際の値を取得するための適切なキーを渡す必要があります。

if (key == null) 
     return getForNullKey(); 
    int hash = hash(key.hashCode()); 
    for (Entry<K,V> e = table[indexFor(hash, table.length)]; 
     e != null; 
     e = e.next) { 
     Object k; 
     if (e.hash == hash && ((k = e.key) == key || key.equals(k))) 
      return e.value; 
    } 
    return null; 

三ソリューション

Map<String, String> pref = new TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER); 

OR

Map<String, String> map = new CaseInsensitiveMap<String, String>(); 

OR

Looping through map with the ignore case 
-1
pref.containsKey(buffSB.toString().toLowerCase()) 

使用した文字列に対してString.toUpperCase()またはstring.toLowerCase()場合を無視します。あなたがマップのkeySetをループは、各キーのために、比較するために文字列関数equalsIgnoreCaseを使用することができます

map.put(key.toLowercase(), value); 
// later 
String val = map.get(someKey.toLowerCase()); 
+1

県は "こんにちは" が含まれている場合。 "HELLO"や "hello"の結果はどうなりますか? –

1

のみ、小文字のキーを使用し

Map<String, String> pref = new Datamatch().main(); // Getting the Hashmap from other class 

    String val; 
    for (String key : pref.keySet()) { 
     if (key.equalsIgnoreCase(buffSB.toString())) { 
      val = pref.get(key); 
      break; 
     } 
    } 
+1

そして、もし彼が大文字と小文字を持つために文字列を絶対に必要とすれば?たとえば名前のように... –

2

あなたはまたに試すことができますそのコンストラクタにコンパレータを提供可能にするのTreeMapを使用します。

Map<String, String> yourMap= new TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER);

あなたはそれがAbstractHashedMap<K,V>を拡張し、それがキーの大文字と小文字を無視する代わりにMap<K,V>

CaseInsensitiveMap<K,V>を使用することができCase insensitive string as HashMap key

2

を参照してください。 既存の大文字と小文字を区別するマップをコンストラクタに渡すことによって、このマップの新しいインスタンスを作成できます。

この例を考えてみます。値はmap.put("One", "One")と挿入上書きmap.put("one", "Four")

<one, "Four"> 
<two, "Two"> 
<null, "Three"> 

Infactは:

Map<String, String> map = new CaseInsensitiveMap<String, String>(); 
map.put("One", "One"); 
map.put("Two", "Two"); 
map.put(null, "Three"); 
map.put("one", "Four"); 

マップ意志は、3つの要素を含んでいます。

map.get(null) "3"を返します。

map.get("ONE")map.get("one")map.get("One")などは "4"を返します。

keySet()メソッドはすべて小文字のキーまたはヌルを返します。

keySet()は、{"one", "two", null}と等しい。

Further documentation

関連する問題