如果您的文本未更改其结构,则可以为此编写正则表达式。我要做的事情:
- 击败向您发送此输出的人
- 说服他发送更好的方法,并用逗号和空格分隔每个逻辑部分
- 现在,您可以使用正则表达式
,\s
来拆分字符串
,
regex不是您需要的工具。
您可以尝试以下操作:
public static String[] split(String s) {
List<String> result = new ArrayList<>();
StringBuilder buf = new StringBuilder();
int level = 0;
boolean inQuotes = false;
for (char c: s.toCharArray()) {
switch (c) {
case ' ':
if (buf.length() > 0) {
buf.append(c);
}
break;
case ',':
if (level == 0 && !inQuotes) {
result.add(buf.toString());
buf.setLength(0);
} else {
buf.append(c);
}
break;
case '"':
buf.append(c);
inQuotes = !inQuotes;
break;
case '[':
case '{':
buf.append(c);
if (!inQuotes) {
++level;
}
break;
case ']':
case '}':
buf.append(c);
if (!inQuotes) {
--level;
}
break;
default:
buf.append(c);
break;
}
}
if (inQuotes || level > 0) {
throw new IllegalArgumentException("Syntax error");
}
result.add(buf.toString());
return result.toArray(new String[result.size()]);
}
但是不会消除引号(顺便说一句:我不知道应该如何处理引号):
1
two
{[three,4,5,{six,7}]}
8
nine
{[ten,{"11":"12"},{"thirteen":14}]}
"fifteen"
16
,
您可以使用以下正则表达式来完成它-> ,(?![^\\[]*\\])
检查下一个代码,它使用上面的正则表达式拆分String。然后迭代(字符串部分的)数组并修剪每个值,最后打印出数组。
public static void main(String[] args) {
String str1 = "1,two,{[three,7}]},8,nine,{[ten,{\"11\":\"12\"},{\"thirteen\":14}]},\"fifteen\",16";
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);
}
}
输出:
1
two
{[three,{"thirteen":14}]}
"fifteen"
16
本文链接:https://www.f2er.com/3147086.html