2016-06-13 124 views
0
Map<String, String> hashtable = new Hashtable<>(); 
hashtable.put("eBook Cover Image", "724242"); 
hashtable.put("Cover Image", "95757"); 
hashtable.put("Image", "9242424"); 
hashtable.put("Composite", "7697979"); 
hashtable.put("Low-Res PDF (print)", "1111111111111111"); 
hashtable.put("Cover", "c11111111"); 

String s = "eBook Cover Image OR (Low-Res PDF (print) AND Composite)"; 

for (Map.Entry<String, String> m : hashtable.entrySet()) { 
    s = s.replace(m.getKey(), m.getValue()); 
} 

替換未正確發生。如果密鑰與精確字符串匹配,則用字符串替換字符串

eBook c11111111 9242424 OR (1111111111111111 AND pppppppppppppppp) 
+0

你期望什麼結果? '電子書c11111111 9242424或(1111111111111111和7697979)'或者'724242或(1111111111111111和7697979)'? –

+0

我跑你的代碼,得到:'724242或(1111111111111111和7697979)' –

+0

724242或(1111111111111111和7697979) – user739115

回答

5

其中條目迭代未設置與Hashtable的順序,所以看起來你訪問"eBook Cover Image"之前訪問"Image"

你可能需要一個LinkedHashMap你放置更長的密鑰在地圖第一(如你在你的例子有),因爲它會在插入順序(默認)重複的條目。

+0

插入可以按照該地圖中的任何順序發生。 – user739115

+0

@ user739115:這將是提出問題的重要信息。您需要按照長度(最長優先)對鍵進行排序,然後按照順序對它們進行循環。 「Hashtable」中的任何內容都不會爲你魔法般地做到這一點。 –