繁体   English   中英

Java Regex - 拆分逗号分隔列表但排除方括号内的逗号

[英]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 键必须是字符串,并且testtest1等也必须用引号括起来才能成为 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM