我试图拆分字符串并将其添加到字符串数组。
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函数将其拆分。有人可以建议使用正则表达式来获取此输出吗?
答案 0 :(得分:0)
如果您的文本未更改其结构,则可以为此编写正则表达式。我要做的事情:
,\s
来拆分字符串答案 1 :(得分:0)
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
答案 2 :(得分:0)
您可以使用以下正则表达式来完成它-> ,(?![^\\[]*\\])
检查下一个代码,它使用上面的正则表达式拆分String。然后迭代(字符串部分的)数组并修剪每个值,最后打印出数组。
public static void main(String[] args) {
String str1 = "1, two, {[three,4,5,{six,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,4,5,{six,7}]}
8
nine
{[ten,{"11":"12"},{"thirteen":14}]}
"fifteen"
16