我有这样一个字符串:
KEY1=Value1, KE_Y2=[V@LUE2A, Value2B], Key3=, KEY4=V-AL.UE4, KEY5={Value5}
我需要将其拆分以获得包含键值对的 Map。 []
中的值应作为单个值传递(KE_Y2
是键,[V@LUE2A, Value2B]
是值)。
我应该使用什么正则表达式来正确拆分它?
最佳答案
第一次拆分有一个神奇的正则表达式:
String[] pairs = input.split(", *(?![^\\[\\]]*\\])");
然后用简单的“=”分割每个键/值:
for (String pair : pairs) {
String[] parts = pair.split("=");
String key = parts[0];
String value = parts[1];
}
综合起来:
Map<String, String> map = new HashMap<String, String>();
for (String pair : input.split(", *(?![^\\[\\]]*\\])")) {
String[] parts = pair.split("=");
map.put(parts[0], parts[1]);
}
瞧!
魔法正则解释:
正则表达式表示“逗号后跟任意数量的空格(因此键名没有前导空格),但前提是遇到的下一个括号不是右括号”
关于java - 拆分键=值的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16099975/