代码:
Map test = new HashMap<String,String>();
test.put("1", "erica");
test.put("2", "frog");
System.out.println(test.toString());
此代码将输出显示为:
{1=erica, 2=frog}
我希望将此输出再次作为键值对放入映射中。
有什么建议我可以实现这个吗?
或者是用于将输出再次转换为HashMap
的任何预定义实用程序类?
答案 0 :(得分:2)
对我来说,正确的方法是使用像Jackson
这样的JSON
解析器,因为序列化HashMap
的方式并不意味着在使用特定字符之后进行解析像=
或,
一样,他们不会被转义,这使得它无法解决。
如何使用Map
序列化Jackson
?
ObjectMapper mapper = new ObjectMapper();
String result = mapper.writeValueAsString(myMap);
如何将String
反序列化以获得Map
Jackson
?
ObjectMapper mapper = new ObjectMapper();
Map map = mapper.readValue(contentToParse, Map.class);
答案 1 :(得分: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;
答案 2 :(得分: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这样的格式更适合序列化地图。
请注意,上述解决方案不会转义字符串,只有在字符串不包含“或”等字符时才有效。如果您需要处理这些情况,它将变得更加复杂。
答案 3 :(得分: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中测试过我刚才写的代码。我希望它能起作用