Java 将字符串转换为数组

Java 将字符串转换为数组,java,algorithm,Java,Algorithm,我有这样一个字符串: (A,X(B,C,D),X(E,F),G,H) 我想把它转换成这样的数组: [{A}, {X(B,C,D)}, {X(E,F)}, {G}, {H}] 输入字符串可以有如下嵌套元素 (A,X(B,X(A,B),D)) 我想用树形结构来做。 在java中,最好的方法是什么?只要字符串没有像上面的示例那样的内部嵌套括号,就可以使用split: String str = "(A,X(B,C,D),X(E,F),G,H)"; String[] split

我有这样一个字符串:

(A,X(B,C,D),X(E,F),G,H)
我想把它转换成这样的数组:

[{A}, {X(B,C,D)}, {X(E,F)}, {G}, {H}]
输入字符串可以有如下嵌套元素

(A,X(B,X(A,B),D))
我想用树形结构来做。
在java中,最好的方法是什么?

只要字符串没有像上面的示例那样的内部嵌套括号,就可以使用split:

String str = "(A,X(B,C,D),X(E,F),G,H)";

String[] splited = str.substring(1, str.length()-1).split(",(?![^()]*\\))");
System.out.println(Arrays.toString(splited));

//output: [A, X(B,C,D), X(E,F), G, H]
String text=“(A,X(B,C(G,H),D),X(E,F),G,H)”;
int括号=0;
int lastcoma=0;
列表部件=新的ArrayList();

对于(inti=1;iAnd?您的问题是什么?是的,然后执行?使用String.split(“,”)@Sascha the String.split()在这种情况下不起作用case@Youssef然后,你必须像解析器一样进行操作。迭代字符并确定它是否是分隔的逗号。如果在开始或结束括号后有一个信息标志应该有所帮助。不幸的是,它可以有这样的嵌套参数“(a,X(B,X(a,B),D),X(E,F),G,H)”对于这样的输入,期望的输出是什么样子的?[{A},{X(B,X(A,B),D)},{X(E,F)},{G},{H}]就是这样谢谢你,先生,最后一个元素消失了,但我会试图找出是什么编辑了我的代码来纠正我的疏忽。检查循环后面的行。
    String text="(A,X(B,C(G,H),D),X(E,F),G,H)";

    int brackets=0;
    int lastComma=0;
    List<String> parts=new ArrayList<>();
    for(int i=1;i<text.length()-1;i++)
    {
        char c=text.charAt(i);
        if(c=='(')
            brackets++;
        else if(c==')')
            brackets--;
        else if(c==',' && brackets==0)
        {
            parts.add("{"+text.substring(lastComma+1,i)+"}");
            lastComma=i;
        }
    }
    parts.add("{"+text.substring(lastComma+1,text.length()-1)+"}");

    System.out.println(parts); //[{A}, {X(B,C(G,H),D)}, {X(E,F)}, {G}, {H}]