通过 {} 和 [] 分割字符串

4

我对Java还比较陌生。 我想知道是否有更简单但高效的方法来实现以下字符串分割。我尝试使用模式和匹配器,但并没有得到我想要的结果。

"{1,24,5,[8,5,9],7,[0,1]}"

要被分割成:
1 
24
5
[8,5,9]
7
[0,1]

这是一段完全错误的代码,但我还是要发布它:

    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++;


    }

}

假设有一个字符串格式,类似于{a,b,[c,d,e],...}的格式。我想列举出所有的内容,但方括号中的内容应该被表示为一个元素(就像数组一样)。


7
你能发布一下你已经尝试过的代码吗? - Anthony Forloney
@AndrewThompson 为什么这个标题?OP从来没有说过他想要将其拆分成多维int数组,他只是想要拆分字符串... - BackSlash
@BackSlash 嗯...也许我想太多了。请参见进一步的编辑。 - Andrew Thompson
你能更精确地说明一下格式吗?例如,如果它是“由逗号分隔的正整数或被'[' / ']'所包围的字符串所组成的{/}分隔列表”,那么编写一个小解析器或正则表达式来匹配元素将不会很难。 - Joshua Taylor
1个回答

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());
     }
  }

产生输出。
1
24
5
[8,5,9]
7
[0,1]

2
不错的解决方案。请注意,@user2516389,这不会检查整个列表是否被{/}括号所包围,并且“嵌套数组”可以包含任何内容。例如,对于输入“garbarge at beginning 5,[8,foo,5,9],7}}}”,输出为5[8,foo,5,9]7(每个都在自己的一行上)。另一个例子,“{2,3},4,5”产生2 3 4 5"{2,3}4,5"也是如此。 - Joshua Taylor

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