确定我做错了什么,但无法实现什么:) 我填充一个键/值对集合Map keyValuePairs与数据,当我尝试检查集合以通用方式keyValuePairs.containsKey(“Name”)获取特定键存在并取回“false”。但keyValuePairs.keySet()会返回“名称”存在的密钥集。匹配后HashMap.containsKey(Object key)找不到密钥
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,默认值=真,可编辑=真,名称=胡麻afskrivning,ID = 1,转录= FALSE}
“keyValuePairs.keySet()”= HashMap的$ 1(ID = 830062763448)
[LocationId,默认,可编辑的,姓名,ID,转录]“keyValuePairs.containsKey(” 姓名 “)”=假
有谁请给我解释一下什么是错呢?谢谢。
您确定您的密钥是“名称”,而不是“名称”或“名称”或甚至是“\ tName”吗? – Riduidel 2010-07-08 13:32:33
可能希望包含正在使用的正则表达式和源数据,这将有助于回答@Riduidel的问题 – andersoj 2010-07-08 13:39:03
我们可以在匹配程序正则表达式中获得高峰吗?可能很容易,你错配了一些东西。无论如何,在执行.put(...)之前对String键进行规范化通常是一个好主意。 – 2010-07-08 13:42:13