HashMap.containsKey(Object key)找不到密钥

时间:2010-07-08 13:29:54

标签: java collections

当然我做错了什么,却无法实现:) 在我尝试以常见方式keyValuePairs.containsKey(“Name”)检查特定密钥存在的集合并且返回“false”之后,我用数据填充键/值对集合Map keyValuePairs。但是keyValuePairs.keySet()给出了“Name”存在的键集。

public static void parseBusinessObject(String input, Object output) {

Class parsingObject = output.getClass();
Field[] fields = parsingObject.getDeclaredFields();

Pattern pattern = Pattern.compile("([^{=;]*)=([^;}]*);");
Matcher matcher = pattern.matcher(/*input*/"anyType{Id=1; Name=Til afskrivning; LocationId=1; Editable=true; Default=true; Transcribed=false; }");
Map<String, String> keyValuePairs = new HashMap<String, String>();
while (matcher.find()) {
    if(!keyValuePairs.containsKey(matcher.group(1))){
    keyValuePairs.put(matcher.group(1).trim(), matcher.group(2).trim());
}
}

for (Field field : fields) {
    if(keyValuePairs.containsKey(field.getName())){
        //TODO: add values to fields    
    }
}
}

匹配后的输出结果:

 Id=1;
 Name=Til afskrivning;
 LocationId=1;
 Editable=true;
 Default=true;
 Transcribed=false;

“keyValuePairs”= HashMap(id = 830062742672) {LocationId = 1,默认= true,Editable = true,Name = Til afskrivning,Id = 1,Transcribed = false}

  

“keyValuePairs.keySet()”= HashMap $ 1(id = 830062763448)
  [LocationId,Default,Editable,Name,Id,Transcribed] [/ p>      

“keyValuePairs.containsKey(”Name“)”= = false

有人可以解释一下它有什么问题吗?谢谢。

1 个答案:

答案 0 :(得分:3)

引用您在问题中提供的信息:

"keyValuePairs.keySet()"= HashMap$1  (id=830062763448)  
[ LocationId,  Default,  Editable,  Name, Id,  Transcribed]

一些关键名称前面的额外空格表示插入的密钥是" Name"(请注意前面的空格)。如果您提供有关正则表达式的更多信息,我们可能会弄清楚为什么会发生这种情况。

您也可以通过记录/打印group(1)group(2)匹配来自行调试;我相信你会发现它与额外的空格相匹配。

快速解决方法是将group(1).trim()group(2).trim()放入地图中,但更好的选择是修复正则表达式。