Java正则表达式 - 拆分逗号分隔列表但排除方括号内的逗号

3
我试图分割以下字符串,但我想排除[[......]]中包含的所有内容。我已经尝试了在这里找到的多个建议,但它们都没有起作用。
[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"}]]]

我尝试使用逗号将字符串拆分,但是这样也会将方括号中包含的所有数据拆分开。谢谢。

1
你可以先以 "[[" 为分隔符进行分割,然后再对结果中的第一个元素使用 "," 进行分割。 - Erwan C.
1个回答

5
除了最外层的[],它看起来像JSON,所以你可以用{}代替外部的[],并将其解析为JSON。
编辑:我回复得有点太快了。JSON键需要是字符串,如果要将其转换为JSON,则testtest1等也必须用引号括起来。以下代码在顶层逗号处拆分,并打印出它们周围修剪过的字符串,去掉最外层的[]
....
  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的内容,这样您就无需手动处理。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接