代码:字符串映射转换的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