У меня есть такая строка:

(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?

0
Youssef 8 Июн 2021 в 16:15

2 ответа

Лучший ответ
    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 Июн 2021 в 14:13

Пока ваша строка не имеет внутренней вложенной круглой скобки, как в приведенном выше примере, вы можете использовать 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 Июн 2021 в 13:51