用于映射转换java的字符串

时间:2016-09-08 12:43:41

标签: java string hashmap

代码:

 Map test = new HashMap<String,String>();
 test.put("1", "erica");
 test.put("2", "frog");
 System.out.println(test.toString());

此代码将输出显示为:

 {1=erica, 2=frog}

我希望将此输出再次作为键值对放入映射中。 有什么建议我可以实现这个吗? 或者是用于将输出再次转换为HashMap的任何预定义实用程序类?

4 个答案:

答案 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中测试过我刚才写的代码。我希望它能起作用