2016-09-08 85 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);