当然我做错了什么,却无法实现:) 在我尝试以常见方式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
有人可以解释一下它有什么问题吗?谢谢。
答案 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()
放入地图中,但更好的选择是修复正则表达式。