Я получаю следующую строку в своем 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");
}
}
Но это не работает, это не правильно разбор, как то, что я ожидал. Может ли кто-нибудь посоветовать, как следует разбирать строку отдельно, как я ожидал?
Вы можете разбить эту строку с помощью 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"
Попробуйте с помощью Pattern и Matcher, используя Lazy way и Lookaround
(?<=\[).*?(?=\])
ИЛИ собственный квантификатор
(?<=\[)[^]]*+(?=\])
Образец кода:
Matcher matcher = Pattern.compile("(?<=\\[).*?(?=\\])").matcher(strring);
while (matcher.find()) {
System.out.println(matcher.group());
}
ˇ˛END
?