13

可能重复:
有没有一种好方法可以让 Map<String, ?> 忽略大小写?

在 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

为什么不使用 aTreeMap而不是HashMap,那么您可以使用不区分大小写的顺序指定 Comparator ( String.CASE_INSENSITIVE_ORDER):

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 回答