【发布时间】:2019-11-08 06:20:10
【问题描述】:
尝试在字符串中使用逗号作为分隔符进行拆分并添加到字符串数组中,但在使用正则表达式拆分字符串时遇到问题。
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);
}
输入字符串
String str="1, two, {\"\"Customization\"\":{\"\"EMPLOYEEID\"\":\"\"EMPID001\"\",\"\"MANAGER_ID\"\":\"\"MNGID001\"\",\"\"DEPARTMENT\"\":\"\"IT\"\"},\"\"OTHERDETAILS\"\":{\"\"GENDER\"\":\"\"M\"\",\"\"DESIGNATION\"\":\"\"SENIOR\"\",\"\"TEAM\"\":\"\"QA\"\"}}, 8, nine,{{\"COMPANYNAME\":\"XYZ Ind Pvt Ltd\"},{[ten,{\"11\":\"12\"},{\"thirteen\":14}]}},\"fifteen\",16";
需要的输出
1
two
{""Customization"":{""EMPLOYEEID"":""EMPID001"",""MANAGER_ID"":""MNGID001"",""DEPARTMENT"":""IT""},""OTHERDETAILS"":{""GENDER"":""M"",""DESIGNATION"":""SENIOR"",""TEAM"":""QA""}}
8
nine
{{"COMPANYNAME":"XYZ Ind Pvt Ltd"},{[ten,{"11":"12"},{"thirteen":14}]}}
fifteen
16
【问题讨论】:
-
停在那里。您应该使用 JSON 解析器。
-
@TimBiegeleisen 除了输入不是 JSON。外层不是 JSON 数组(缺少
[]),嵌套对象(第三个值)有双双引号。 -
您不能使用正则表达式(因此
split)来处理具有嵌套结构的文本。试试别的,例如自己迭代字符串的字符,跟踪{}嵌套以及是否在""字符串内。 -
如果没有任意嵌套:
[^\s,}{][^,}{]*|\{(?:[^}{]+|\{(?:[^}{]+|\{[^}{]*\})*\})*\}需要在模式中添加更深的最大嵌套。如果有任意嵌套,请参阅this idea。该模式可能看起来like this。但请注意,这是实验性的并且非常缓慢。它会在更大的字符串上中断:)