[英]Java Regex - split comma separated list, but exclude commas within parentheses
[英]Java Regex - Split comma separated list but exclude commas within square brackets
我正在尝试拆分下面的字符串,但我想排除[[......]]
中的所有内容。 我已经尝试使用我已经在这里找到的多个建议,但它们都不起作用。
[675: test, 676: test1, 677: test2, 678: [[{"id":0,"value":"15"},{"id":1,"value":"2"},
{"id":2,"value":"2"}],[{"id":0,"value":"2"},{"id":1,"value":"3"},
{"id":2,"value":"3"}],[{"id":0,"value":"5"},{"id":1,"value":"6"},
{"id":2,"value":"6"}],[{"id":0,"value":"7"},{"id":1,"value":"8"}],
[{"id":0,"value":"99"},{"id":1,"value":"8"},{"id":2,"value":"7"}]]]
我希望能够得到这样的结果:
675: test
676: test1
677: test2
678: [[{"id":0,"value":"15"},{"id":1,"value":"2"}, {"id":2,"value":"2"}],
[{"id":0,"value":"2"},{"id":1,"value":"3"},{"id":2,"value":"3"}],
[{"id":0,"value":"5"},{"id":1,"value":"6"}, {"id":2,"value":"6"}],
[{"id":0,"value":"7"},{"id":1,"value":"8"}],
[{"id":0,"value":"99"},{"id":1,"value":"8"},{"id":2,"value":"7"}]]]
我尝试用逗号分割字符串,但这也分割了方括号中包含的所有数据。
谢谢
除了[]
的外部集合,它看起来像 JSON,因此您可以将外部[]
替换为{}
并将其解析为 JSON。
编辑:我有点太快回复了。 JSON 键必须是字符串,并且test
、 test1
等也必须用引号括起来才能成为 JSON。 以下代码在顶级逗号上拆分并打印出它们周围的修剪字符串,删除外部[]
s。
....
public static void parse(String s) {
boolean quote = false;
int depth = 0;
int splitPoint = 1; // drop the first '['
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
switch (c) {
case '"':
quote = !quote;
break;
case '{':
case '[':
if (!quote) {
depth += 1;
}
break;
case '}':
case ']':
if (!quote) {
depth -= 1;
}
break;
case ',':
if (!quote && depth == 1) {
System.out.println(s.substring(splitPoint, i).trim()); // or store
splitPoint = i + 1;
}
break;
}
}
System.out.println(s.substring(splitPoint, s.length() - 1).trim()); // or store
}
....
输出:
675: test
676: test1
677: test2
678: [[{"id":0,"value":"15"},{"id":1,"value":"2"},{"id":2,"value":"2"}],[{"id":0,"value":"2"},{"id":1,"value":"3"},{"id":2,"value":"3"}],[{"id":0,"value":"5"},{"id":1,"value":"6"},{"id":2,"value":"6"}],[{"id":0,"value":"7"},{"id":1,"value":"8"}], [{"id":0,"value":"99"},
{"id":1,"value":"8"},{"id":2,"value":"7"}]]
如果您可以访问构建该字符串的代码,理想情况下,您可以让它打印可直接解析为 JSON 的内容,然后您就无需进行手动处理。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.