Tengo una cadena como esta:

(A,X(B,C,D),X(E,F),G,H)

Y quiero transformarlo en una matriz así:

[{A}, {X(B,C,D)}, {X(E,F)}, {G}, {H}]

La cadena de entrada puede haber anidado elementos como este

(A,X(B,X(A,B),D))

Pensé que lo hiciera con la estructura de árboles. ¿Cuál es la mejor manera de hacerlo en Java?

0
Youssef 8 jun. 2021 a las 16:15

2 respuestas

La mejor respuesta
    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}]
1
Sascha 8 jun. 2021 a las 14:13

Mientras su cadena no tenga paréntesis anidados interna, como su ejemplo anterior, podría usar 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]
0
Eritrean 8 jun. 2021 a las 13:51