2016-09-08 142 views
2

代碼:字符串映射轉換的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

+3

有沒有標準的工具來反序列化一個'Map'的字符串表示回一個'Map'對象,所以你必須給自己建立一個。問題是,爲什麼你會要求(而不是說序列化爲JSON或XML)? – Mena

+2

'toString'輸出可以改變,你不應該依賴它。 –

+0

同意 - 考慮序列化到/從JSON或類似的東西 - 只需使用Jackson ObjectMapper將爲您完成大部分工作。 – BarrySW19

回答

0

你可以嘗試使用這個:

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; 
0

如果你要複製的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作品。如果您需要處理這些情況就會變得更加複雜。

0

你可以請嘗試以下操作:

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代碼中,我只是從我的腦海裏寫道:我希望它會工作

1

對我來說是正確的方法是使用一個JSON解析器像Jackson自一個0123的方式已序列化並不意味着解析後,如果您使用特定字符如=,他們將不會被轉義,這使得它不可解析。

如何序列化MapJackson

ObjectMapper mapper = new ObjectMapper(); 
String result = mapper.writeValueAsString(myMap); 

如何反序列化String獲得與Jackson一個Map

ObjectMapper mapper = new ObjectMapper(); 
Map map = mapper.readValue(contentToParse, Map.class);