HashMap <string,string>没有返回键

时间:2015-12-15 21:20:35

标签: java regex string hashmap

Sooooo,我遇到HashMap<String, String>的问题。我知道密钥存在于地图中,我在地图中看到了密钥但由于某种原因我无法匹配密钥。当我将值插入地图时,我修剪()它以摆脱任何空格字符。

当我在运行时检查地图时,我看到:{N * = N414} 然后我用一些测试代码检查了它:

String entityFromMap="N*";
for ( String key : entityMap.keySet() ) {
    System.out.println("["+key+"]");
}
for ( String key : entityMap.keySet() ) {
    System.out.println("["+key.equals("N*")+"]");
}
System.out.println(entityMap.keySet().contains("N*"));
System.out.println(entityMap.keySet().contains(entityFromMap));
System.out.println(entityMap.containsKey("N*"));
System.out.println(entityMap.containsKey(entityFromMap));

我得到了这个输出:

[N*]
[true]
false
false
false
false

当我尝试获取与N *键相对应的值时

return (String) entityMap.get(entityFromMap);

我得到了空。

我在这里缺少什么?这是我试图从地图中获取密钥的方式吗?我的直觉告诉我,在钥匙上有一个*有问题,比较款待是正则表达式还是什么?当我输入我的字符串时,还有其他东西可以检查吗?除了trim()?

我试着查看其他帖子,但大多数都是通过检查空格字符解决它,我很肯定这里没有,所以我不知道下一步该做什么。我发现这篇文章:link但我不确定这是同一个问题....

编辑: 这是填充地图的方式:

codeMap.put(ResultSet.getString(1).trim(), ResultSet.getString(2).trim());

2 个答案:

答案 0 :(得分:1)

HashMap根据equals()hashCode()查找值。您可以轻松打印并比较哈希码:

System.out.println("N*".hashCode());
for (String key : entityMap.keySet()) {
    System.out.println(key.hashCode());
}

如果他们是平等的,我会断定你没有标准的HashMap,而是基于对象身份的其他一些地图实现,比如IdentityHashMap。如果它们不相等,那么编码将成为问题:明星e。 G。可能是U + 2217“*”而不是“*”。某些字体会将它们映射到相同的字符。

同时检查调试器中的值。

答案 1 :(得分:0)

正则表达不用于比较密钥,它与此无关。 当您在寻找密钥时,请不要忘记key.trim(),它不会去任何地方。

这与你的地图或它对待字符串的方式无关,你可能会混淆一些东西,因为我确实运行了你的代码:

import java.util.*;

public class HelloWorld {
    public static void main(String []args) {
        HashMap<String,String> entityMap = new HashMap<String, String>();
        entityMap.put("N*", "data"); //you can put null instead of data

        String entityFromMap = "N*";
        for (String key : entityMap.keySet()) {
            System.out.println("["+key+"]");
        }
        for (String key : entityMap.keySet()) {
            System.out.println("["+key.equals("N*")+"]");
        }
        System.out.println(entityMap.keySet().contains("N*"));
        System.out.println(entityMap.keySet().contains(entityFromMap));
        System.out.println(entityMap.containsKey("N*"));
        System.out.println(entityMap.containsKey(entityFromMap));
    }
}

输出:

  

[N *]
  [真]
  真正
  真正
  真正
  真