我正在尝试检查我的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());
}
任何帮助将不胜感激!!!
答案 0 :(得分:2)
您也可以尝试使用TreeMap,它可以为其构造函数提供比较器:
Map<String, String> yourMap=
new TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER);
答案 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}
。
答案 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()来忽略大小写。