Разбор длинной строки в Java

1

Я получаю следующую строку в своем java-приложении от клиента.

[["UIButton","Submit","15","30","80","80"],["UILabel","User name","15","75","80","80"],["UITextField","Jonathan","15","75","80","80"]]ˇ˛END

Я ожидаю разобрать это и вынести отдельно как 3 строки, как показано ниже:

"UIButton","Submit","15","30","80","80"
"UIButton","Submit","15","30","80","80"
"UIButton","Submit","15","30","80","80"

Я пробовал, как показано ниже,

    // resultStr = [["UIButton","Submit","15","30","80","80"],["UILabel","User name","15","75","80","80"],["UITextField","Jonathan","15","75","80","80"]]ˇ˛END
    if ( resultStr.length()>0 && resultStr!=null ) {

        for (int i=0; i<resultStr.length(); i++) {
            int startInd = resultStr.indexOf('[');
            int endInd = resultStr.indexOf(']');
            if ( startInd>=0 && endInd>0 ) {
                String resStr =  resultStr.substring(startInd , endInd);
                if ( resStr!=null )
                    System.out.println("Applet resStr: " + resStr);
            }
            else
                System.out.println("Applet startindex, endindex failed");
        }
    }

Но это не работает, это не правильно разбор, как то, что я ожидал. Может ли кто-нибудь посоветовать, как следует разбирать строку отдельно, как я ожидал?

  • 3
    Использовать анализатор JSON? Есть много перечисленных для Java на json.org .
  • 0
    что это в конце строки ˇ˛END ?
Показать ещё 1 комментарий
Теги:

2 ответа

1
Лучший ответ

Вы можете разбить эту строку с помощью String.split():

String[] t = myString.substring(2, s.length()-7).split("\\],\\[");

Таким образом, ваш код будет выглядеть так:

//resultStr = [["UIButton","Submit","15","30","80","80"],["UILabel","User name","15","75","80","80"],["UITextField","Jonathan","15","75","80","80"]]ˇ˛END
if ( resultStr.length()>7 && resultStr!=null ) {

    String[] resStrings = resultStr.substring(2, resultStr.length()-7).split("\\],\\[");    
    for (String resString: resStrings) {
        System.out.println("Applet resStr: " + resStr);
    }
}

В результате вы должны иметь следующий результат:

Applet resStr: "UIButton","Submit","15","30","80","80"
Applet resStr: "UILabel","User name","15","75","80","80"
Applet resStr: "UITextField","Jonathan","15","75","80","80"
  • 0
    Фантастика! Я вошел как это ..
  • 0
    Апплет resStr: "UIButton", "Submit", "15", "30", "80", "80" Апплет resStr: "UILabel", "Имя пользователя", "15", "75", "80", "80" Апплет resStr: "UITextField", "Jonathan", "15", "75", "80", "80"]] ˇ˛END
Показать ещё 7 комментариев
0

Попробуйте с помощью Pattern и Matcher, используя Lazy way и Lookaround

(?<=\[).*?(?=\])

онлайн-демонстрация

ИЛИ собственный квантификатор

(?<=\[)[^]]*+(?=\])

онлайн-демонстрация

Образец кода:

Matcher matcher = Pattern.compile("(?<=\\[).*?(?=\\])").matcher(strring);
while (matcher.find()) {
    System.out.println(matcher.group());
}
  • 0
    это не очень помогает, вывод тоже разделяется запятыми.
  • 0
    имеет ли это смысл?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню