【发布时间】:2021-01-19 02:41:45
【问题描述】:
我有以下字符串,我想将其解析为可以包含字符串和整数值的 Map 的 Map。字符串包含一个键,该键可以由字母、空格和/或特殊字符和值(另一个映射)组成,位于一些花括号 “{“ 和 “}” 内:
{A->B={A=0, C=2, B=3, D=“A”, M=0, H=7, key=A->B},
B->C={A=0, C=2, B=3, D=“A”, M=0, H=7, key=B->C},
D & E={A=0, C=2, B=4, D=“A”, M=0, H=7, key=D & E},
FGH={A=0, C=2, B=3, D=“A”, M=0, H=7, key=FGH}}
我需要一个正则表达式来识别花括号内的键/值,以便我可以在使用内部映射的键将映射存储到另一个外部映射之前将它们解析为映射。
到目前为止,这是我的代码:
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class StringToMapOfMapsDemo {
public static void main(String[] args) {
String str = "{A->B={A=0, C=2, B=3, D=“A”, M=0, H=7, key=A->B},
B->C={A=0, C=2, B=3, D=“A”, M=0, H=7, key=B->C},
D & E={A=0, C=2, B=4, D=“A”, M=0, H=7, key=D & E},
FGH={A=0, C=2, B=3, D=“A”, M=0, H=7, key=FGH}}";
List<String> stringList = Stream.of(str.split("\\s*[{},]\\s*")).map(String::trim).collect(Collectors.toList());
System.out.println(stringList);
Map<String, Object> outerMap = new HashMap<>();
for (String keyValue : stringList) {
System.out.println(keyValue);
Map<String, String> innerMap = new HashMap<>();
String[] keyValueParts = keyValue.split("=");
System.out.println(keyValueParts);
innerMap.put(keyValueParts[0], keyValueParts[1]);
if (innerMap.containsKey("key")){
String keyForOuterMap = innerMap.get("key");
outerMap.put(keyForOuterMap, innerMap);
}
}
System.out.println(outerMap);
}
}
【问题讨论】: