2015-11-20 5 views
6

Próbuję sprawdzić, czy mój zestaw klawisza mieszańca zawiera ciąg "buffSB.toString()". Ale chciałem porównać przypadek ignorowania (górny lub dolny).Ignoruj ​​wielkość liter przy porównywaniu ciągu znaków z kluczową wartością w haśle

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

Każda pomoc zostanie bardzo doceniona !!!

Odpowiedz

1

Jeśli widzisz wdrożenie metody HashMap getKey trzeba przejść właściwego klucza do generowania wartości hash i uzyskać rzeczywistą wartość z tego wiadra.

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; 

trzy rozwiązania

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

LUB

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

LUB

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

Użyj string.toUpperCase() lub string.toLowerCase(), aby zignorować wielkość liter.

+1

jeśli pref zawiera "Hello". jaki byłby wynik "HELLO" lub "hello"? –

1

używać tylko małe klawisze:

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

A jeśli on absolutnie potrzebuje strun, aby mieć Uppercases i Lowercases? Jak na przykład imiona ... –

1

Można pętla przez keySet mapy dla każdego klawisza, należy użyć funkcji ciąg equalsIgnoreCase porównać:

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; 
     } 
    } 
2

Można także spróbować użyj TreeMap, które umożliwiają dostarczenie komparatora do jego konstruktora:

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

zobaczyć Case insensitive string as HashMap key

2

Można użyć CaseInsensitiveMap<K,V> zamiast Map<K,V>

Rozciąga AbstractHashedMap<K,V> i ignoruje sprawę kluczy. Możesz utworzyć nową instancję tej mapy, przekazując istniejącą mapę z rozróżnianiem wielkości do konstruktora.

Rozważmy następujący przykład:

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

mapa zostanie zawiera trzy elementy:

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

Rzeczywiście map.put("one", "Four") nadpisuje wartość wkładkę z map.put("One", "One").

map.get(null) zwraca "Trzy".

map.get("ONE"), map.get("one"), map.get("One"), i tak dalej zwraca "Cztery".

Należy pamiętać, że metoda keySet() zwraca wszystkie małe litery lub null.

keySet() równa się {"one", "two", null}.

Further documentation

Powiązane problemy