在hashmap中将字符串与keyvalue进行比较时忽略大小写

时间:2015-11-20 14:33:10

标签: java hashmap ignore-case

我正在尝试检查我的hashmap键集是否包含字符串'buffSB.toString()'。但我想比较忽略的情况(上面或下面)。

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

任何帮助将不胜感激!!!

6 个答案:

答案 0 :(得分:2)

您也可以尝试使用TreeMap,它可以为其构造函数提供比较器:

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

请参阅Case insensitive string as HashMap key

答案 1 :(得分:2)

您可以使用CaseInsensitiveMap<K,V>代替Map<K,V>

它扩展了AbstractHashedMap<K,V>,它忽略了键的情况。 您可以通过将现有区分大小写的映射传递给构造函数来创建此映射的新实例。

考虑这个例子:

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

地图将包含三个元素:

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

Infact map.put("one", "Four")map.put("One", "One")覆盖值插入。

map.get(null)返回&#34;三&#34;。

map.get("ONE")map.get("one")map.get("One")等返回&#34;四&#34;。

请记住,keySet()方法返回所有小写的键或空值。

keySet()等于{"one", "two", null}

Further documentation

答案 2 :(得分:1)

仅使用小写键:

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

答案 3 :(得分:1)

您可以遍历地图的keySet,对于每个键,使用字符串函数equalsIgnoreCase进行比较:

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

答案 4 :(得分: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

答案 5 :(得分:-1)

pref.containsKey(buffSB.toString().toLowerCase())

使用string.toUpperCase()或string.toLowerCase()来忽略大小写。