通过{}&[]拆分字符串

use*_*389 4 java regex string split

我是Java的新手.我想知道是否有一种更简单有效的方法来实现以下Splitting of String.我尝试过模式和匹配器,但并没有真正按照我想要的方式出现.

"{1,24,5,[8,5,9],7,[0,1]}"
Run Code Online (Sandbox Code Playgroud)

被分成:

1 
24
5
[8,5,9]
7
[0,1]
Run Code Online (Sandbox Code Playgroud)

这是一个完全错误的代码,但我仍然发布它:

    String str = "{1,24,5,[8,5,9],7,[0,1]}";
    str= str.replaceAll("\\{", "");
    str= str.replaceAll("}", "");
    Pattern pattern = Pattern.compile("\\[(.*?)\\]");
    Matcher matcher = pattern.matcher(str);
    String[] test = new String[10];
   // String[] _test = new String[10];
    int i = 0;
    String[] split = str.split(",");

    while (matcher.find()) {


        test[i] = matcher.group(0);
        String[] split1 = matcher.group(0).split(",");


      // System.out.println(split1[i]);
           for (int j = 0; j < split.length; j++) {
             if(!split[j].equals(test[j])&&((!split[j].contains("\\["))||!split[j].contains("\\]"))){
              System.out.println(split[j]);
             }

        }
        i++;


    }

}
Run Code Online (Sandbox Code Playgroud)

使用给定的String格式,可以说{a,b,[c,d,e],...}格式.我想要获取所有内容,但方括号中的内容将被表示为一个元素(如数组).

nat*_*bbs 6

这有效:

  public static void main(String[] args)
  {
     customSplit("{1,24,5,[8,5,9],7,[0,1]}");
  }


  static void customSplit(String str){
     Pattern pattern = Pattern.compile("[0-9]+|\\[.*?\\]");
     Matcher matcher =
           pattern.matcher(str);
     while (matcher.find()) {
        System.out.println(matcher.group());
     }
  }
Run Code Online (Sandbox Code Playgroud)

产量输出

1
24
5
[8,5,9]
7
[0,1]
Run Code Online (Sandbox Code Playgroud)

  • 好的解决方案 请注意,@ user2516389,虽然这不会执行任何检查,整个列表被`{`/`}`大括号包围,并且"嵌套数组"可以包含任何内容.例如,输入`"开头5的加油,[8,foo,5,9],7}}}"`输出是'5`,`[8,foo,5,9]`,`7`(每个人都在自己的路上).另一个例子,"{2,3},4,5"产生"2 3 4 5","{2,3} 4,5"也是如此. (2认同)