確定我做錯了什麼,但無法實現什麼:) 我填充一個鍵/值對集合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