我正在尝试拆分字符串并将其添加到字符串数组。
String str1 = "1, two, {[three,4,5,{six,7}]}, 8, nine,{[ten,{\"11\":\"12\"},{\"thirteen\":14}]},\"fifteen\",16";
数组中的必需输出是:
1
two
{[three,4,5,{six,7}]}
8
nine
{[ten,{"11":"12"},{"thirteen":14}]}
fifteen
16
我们需要使用正则表达式在Java中使用split函数将其拆分。任何人都可以建议正则表达式来获取此输出吗?
如果文本不改变其结构,则可以为此专门编写正则表达式。我会做的事情:
,\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