代碼:字符串映射轉換的java
Map test = new HashMap<String,String>();
test.put("1", "erica");
test.put("2", "frog");
System.out.println(test.toString());
該代碼給出的輸出:
{1=erica, 2=frog}
我希望再次把這個輸出映射爲鍵值對。 任何建議如何實現這一點? 或者是其他預定義的工具類,用於將輸出再次轉換爲HashMap
?
代碼:字符串映射轉換的java
Map test = new HashMap<String,String>();
test.put("1", "erica");
test.put("2", "frog");
System.out.println(test.toString());
該代碼給出的輸出:
{1=erica, 2=frog}
我希望再次把這個輸出映射爲鍵值對。 任何建議如何實現這一點? 或者是其他預定義的工具類,用於將輸出再次轉換爲HashMap
?
你可以嘗試使用這個:
String[] tk = mystring.split(" |=");
Map<String, String> map = new HashMap<>();
for (int i=0; i < tk.length-1; i++)
{
map.put(tk[i], tk[i]);
}
return map;
如果你要複製的Java代碼填充地圖,你可以使用這樣的事情:
StringBuilder sb = new StringBuilder("Map<String, String> test = new HashMap<>();");
for(Map.Entry<?, ?> entry : test.entrySet())
{
sb.append("\ntest.put(\"");
sb.append(entry.getKey());
sb.append("\", \"");
sb.append(entry.getValue());
sb.append("\");");
}
String string = sb.toString();
System.out.println(string);
但我同意上司的評價,在許多應用程序中,像JSON這樣的格式更適合序列化地圖。
注意上面的解決方案不逃串,它僅如果字符串不包含像字符「或\ n作品。如果您需要處理這些情況就會變得更加複雜。
你可以請嘗試以下操作:
String out = test.toString();
Map<String, String> newMap = new HashMap();
// remove the first and last "{", "}"
out = out.subString(1,out.size()-1)
String[] newOut = out.split(", ");
for (int i=0; i<newOut.length;i++){
// keyValue is size of 2. cell 0 is key, cell 1 is value
String[] keyValue = newOut.split("=");
newMap.put(keyValue[0], keyValue[1]);
}
我沒有測試在Java代碼中,我只是從我的腦海裏寫道:我希望它會工作
對我來說是正確的方法是使用一個JSON
解析器像Jackson
自一個0123的方式已序列化並不意味着解析後,如果您使用特定字符如=
或,
他們將不會被轉義,這使得它不可解析。
如何序列化Map
與Jackson
?
ObjectMapper mapper = new ObjectMapper();
String result = mapper.writeValueAsString(myMap);
如何反序列化String
獲得與Jackson
一個Map
?
ObjectMapper mapper = new ObjectMapper();
Map map = mapper.readValue(contentToParse, Map.class);
有沒有標準的工具來反序列化一個'Map'的字符串表示回一個'Map'對象,所以你必須給自己建立一個。問題是,爲什麼你會要求(而不是說序列化爲JSON或XML)? – Mena
'toString'輸出可以改變,你不應該依賴它。 –
同意 - 考慮序列化到/從JSON或類似的東西 - 只需使用Jackson ObjectMapper將爲您完成大部分工作。 – BarrySW19