Вы можете использовать следующее регулярное выражение для этого -> ,(?![^\\[]*\\])
Проверьте следующий код, он разделяет строку с приведенным выше регулярным выражением. Затем он перебирает массив (из строковых частей) и обрезает каждое значение, и, наконец, выводит массив.
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