Java 我正在使用toString()方法将映射转换为字符串。有没有办法将字符串转换回地图? Map inputMap=newhashmap(); inputMap.put(“a”、“abc”); inputMap.put(“b”、“bcd”); inputMap.put(“c”、“cde”); HashMap subMap=新的HashMap(); 子映射put(“x”、“xyz”); 子映射put(“z”、“klm”) inputMap.put(“d”,subMap); 字符串输出=inputMap.toString(); 系统输出打印项次(输出); {a=abc,b=bcd,c=cde,d={x=xyz,z=klm}
输出为:{a=abc,b=bcd,c=cde,d={x=xyz,z=klm} 如何将输出转换回映射 提前谢谢 有没有办法将字符串转换回地图 一般来说,没有Java 我正在使用toString()方法将映射转换为字符串。有没有办法将字符串转换回地图? Map inputMap=newhashmap(); inputMap.put(“a”、“abc”); inputMap.put(“b”、“bcd”); inputMap.put(“c”、“cde”); HashMap subMap=新的HashMap(); 子映射put(“x”、“xyz”); 子映射put(“z”、“klm”) inputMap.put(“d”,subMap); 字符串输出=inputMap.toString(); 系统输出打印项次(输出); {a=abc,b=bcd,c=cde,d={x=xyz,z=klm},java,string,hashmap,maps,Java,String,Hashmap,Maps,输出为:{a=abc,b=bcd,c=cde,d={x=xyz,z=klm} 如何将输出转换回映射 提前谢谢 有没有办法将字符串转换回地图 一般来说,没有 Map.toString()实现依赖于K.toString()和V.toString()实现。这些是不可逆的,这意味着Map实现也不能是可逆的 即使在Map情况下,渲染贴图也不会使用任何形式的转义来处理边缘情况。。。类似于包含逗号、等号或花括号的键或值 在受限情况下1,您可以实现自己的解析器,也可以使用此处描述的方法之一: 二, 但是,如
Map.toString()
实现依赖于K.toString()
和V.toString()
实现。这些是不可逆的,这意味着Map
实现也不能是可逆的Map
情况下,渲染贴图也不会使用任何形式的转义来处理边缘情况。。。类似于包含逗号、等号或花括号的键或值- 二,
toString()
是个坏主意。toString()
方法契约及其实现不是为此目的而设计的。它们主要设计用于调试
1-例如,如果您可以假设
K
和V
是String
,则不存在null
键或值,并且它们都不包含笨拙的字符
2-注意:使用split
等的简单解决方案通常无法处理嵌套贴图
有没有办法将字符串转换回地图
一般来说,没有
Map.toString()
实现依赖于K.toString()
和V.toString()
实现。这些是不可逆的,这意味着Map
实现也不能是可逆的Map
情况下,渲染贴图也不会使用任何形式的转义来处理边缘情况。。。类似于包含逗号、等号或花括号的键或值- 二,
toString()
是个坏主意。toString()
方法契约及其实现不是为此目的而设计的。它们主要设计用于调试
1-例如,如果您可以假设
K
和V
是String
,则不存在null
键或值,并且它们都不包含笨拙的字符
2-注意:使用
split
等的简单解决方案通常无法处理嵌套映射。没有预定义的Java方法,但您可以使用自己的逻辑进行编码。
在这里我分享我的工作例子您可以根据需要更改代码
Map<String,Object> inputMap=new HashMap<String,Object>();
inputMap.put("a","abc");
inputMap.put("b","bcd");
inputMap.put("c","cde");
HashMap<String,String> subMap=new HashMap<String,String>();
subMap.put("x","xyz");
subMap.put("z","klm")
inputMap.put("d",subMap);
String output=inputMap.toString();
System.out.println(output);
{a=abc,b=bcd,c=cde,d={x=xyz,z=klm}}
String output=“{a=abc,b=bcd,c=cde,d={x=xyz,z=klm}”;
if(output.indexOf(“{”)==0&&output.lastIndexOf(“}”)==output.length()-1){
output=output.substring(1,output.length()-1);
HashMap convertedMap=转换(输出);
for(HashMap.Entry值:convertedMap.entrySet()){
如果(value.getValue().indexOf(“{”)==0&&value.getValue().lastIndexOf(“}”)==value.getValue().length()-1){
字符串值WithBracket=value.getValue();
convertedMap.remove(值);
convertedMap=转换(带括号的值);
}
}
}
公共静态哈希映射转换(字符串str){
HashMap=newHashMap();
String[]tokens=str.split(“,(?![^{]*\})”;
for(字符串标记:标记){
字符串[]val=token.split(“=(?![^{)]*\\})”;
对于(inti=0;i,没有预定义的Java方法,但您可以使用自己的逻辑进行编码。
我在这里分享我的工作示例。您可以根据需要更改代码。
Map<String,Object> inputMap=new HashMap<String,Object>();
inputMap.put("a","abc");
inputMap.put("b","bcd");
inputMap.put("c","cde");
HashMap<String,String> subMap=new HashMap<String,String>();
subMap.put("x","xyz");
subMap.put("z","klm")
inputMap.put("d",subMap);
String output=inputMap.toString();
System.out.println(output);
{a=abc,b=bcd,c=cde,d={x=xyz,z=klm}}
String output=“{a=abc,b=bcd,c=cde,d={x=xyz,z=klm}”;
if(output.indexOf(“{”)==0&&output.lastIndexOf(“}”)==output.length()-1){
output=output.substring(1,output.length()-1);
HashMap convertedMap=转换(输出);
for(HashMap.Entry值:convertedMap.entrySet()){
如果(value.getValue().indexOf(“{”)==0&&value.getValue().lastIndexOf(“}”)==value.getValue().length()-1){
字符串值WithBracket=value.getValue();
convertedMap.remove(值);
convertedMap=转换(带括号的值);
}
}
}
公共静态哈希映射转换(字符串str){
HashMap=newHashMap();
String[]tokens=str.split(“,(?![^{]*\})”;
for(字符串标记:标记){
字符串[]val=token.split(“=(?![^{)]*\\})”;
for(int i=0;i尝试使用clear()方法的可能副本。它从调用映射中删除所有键/值对。以下是一个解决方案:尝试使用clear()方法的可能副本。它从调用映射中删除所有键/值对。以下是一个解决方案: