Разделить строку в Java с помощью вложенных фигурных скобок, используя запятую за пределами - PullRequest
2 голосов
/ 08 ноября 2019

Попытка разделения с использованием запятой в качестве разделителя в строке и добавления в строковый массив, но возникает проблема при разделении строки с помощью регулярного выражения.

String[] stringParts = str1.split(",(?![^\\[]*\\])");

        for (int i=0; i<stringParts.length; i++){
            stringParts[i] = stringParts[i].trim();//remove trailing leading spaces.
        }
        //System out
        for (String s:stringParts){
            System.out.println(s);
        }

Input String

String str="1, two, {\"\"Customization\"\":{\"\"EMPLOYEEID\"\":\"\"EMPID001\"\",\"\"MANAGER_ID\"\":\"\"MNGID001\"\",\"\"DEPARTMENT\"\":\"\"IT\"\"},\"\"OTHERDETAILS\"\":{\"\"GENDER\"\":\"\"M\"\",\"\"DESIGNATION\"\":\"\"SENIOR\"\",\"\"TEAM\"\":\"\"QA\"\"}}, 8, nine,{{\"COMPANYNAME\":\"XYZ Ind Pvt Ltd\"},{[ten,{\"11\":\"12\"},{\"thirteen\":14}]}},\"fifteen\",16";

Требуемый выход

1
two
{""Customization"":{""EMPLOYEEID"":""EMPID001"",""MANAGER_ID"":""MNGID001"",""DEPARTMENT"":""IT""},""OTHERDETAILS"":{""GENDER"":""M"",""DESIGNATION"":""SENIOR"",""TEAM"":""QA""}}
8
nine
{{"COMPANYNAME":"XYZ Ind Pvt Ltd"},{[ten,{"11":"12"},{"thirteen":14}]}}
fifteen
16

1 Ответ

1 голос
/ 08 ноября 2019

Это не то, для чего разработано регулярное выражение. Вам нужно создать парсер.

Или вы можете сделать что-то похожее на это:

public static void main(String[] args) {
    String str = "1, two, {\"\"Customization\"\":{\"\"EMPLOYEEID\"\":\"\"EMPID001\"\",\"\"MANAGER_ID\"\":\"\"MNGID001\"\",\"\"DEPARTMENT\"\":\"\"IT\"\"},\"\"OTHERDETAILS\"\":{\"\"GENDER\"\":\"\"M\"\",\"\"DESIGNATION\"\":\"\"SENIOR\"\",\"\"TEAM\"\":\"\"QA\"\"}}, 8, nine,{{\"COMPANYNAME\":\"XYZ Ind Pvt Ltd\"},{[ten,{\"11\":\"12\"},{\"thirteen\":14}]}},\"fifteen\",16";
    StringTokenizer st = new StringTokenizer(str, ",", true);
    int bracketCount = 0;
    while (st.hasMoreTokens()) {
        String token = st.nextToken();
        long brackets = token.chars().map(ch -> (ch == '{' ? 1 : (ch == '}' ? -1 : 0))).sum();
        bracketCount += brackets;
        if (bracketCount == 0 && ",".equals(token)) {
            System.out.println("");
        } else {
            System.out.print(token);
        }
    }
}
  • Возьмите строку и разделите на ,, сохранив разделитель в качестве выводатокен
  • подсчитывает количество открытий и закрытий { }. Убедитесь, что все скобки закрыты.
  • Если все { } закрыты, переходите к следующей строке
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...