第一种:正则表达式
实现分割,但对嵌套的括号无效
public class RegexDemo {
public static void main(String[] args) {
// 初始化字符串
String[] strings=new String[7];
strings[0]="a,b,c";
strings[1]="a,b,(c,d)aa";
strings[2]="a,b,(c,(d,e))";
strings[3]="a,b,(c,d,)";
strings[4]="a,b,(c,d),e";
strings[5]="a,b,(c,d),";
strings[6]="a,b,(c,d,e),f(g,h,(i,j),k)";
// 分割并输出结果
for (String str : strings) {
String[] splitStr = str.split(",(?![^(*]+\\))");
System.out.print(" | ");
for (String s : splitStr) {
System.out.print(s+" | ");
}
System.out.println();
}
}
}
结果如图:
第二种 新增标识符解决嵌套的括号
初步实现:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class RegexDemo {
public static void main(String[] args) {
// 初始化字符串
String[] strings=new String[7];
strings[0]="a,b,c";
strings[1]="a,b,(c,d)aa";
strings[2]="a,b,(c,(d,e))";
strings[3]="a,b,(c,d,)";
strings[4]="a,b,(c,d),e";
strings[5]="a,b,(c,d),";
strings[6]="a,b,(c,d,e),f(g,h,(i,j),k)";
for (String str : strings) {
List<String> result = splitIgnoringParentheses(str);
System.out.print(" | ");
Iterator<String> iterator = result.iterator();
while (iterator.hasNext()){
System.out.print(iterator.next()+" | ");
}
System.out.println();
}
}
public static List<String> splitIgnoringParentheses(String input) {
List<String> resultList = new ArrayList<>();
int nestedLevel=0;
StringBuilder sb = new StringBuilder();
// 遍历,考虑字符的每一种情况
for (char c : input.toCharArray()) {
if(c=='('){
nestedLevel++;
sb.append(c);
}
else if(c==')'){
nestedLevel--;
sb.append(c);
}else if(c==','){
if(nestedLevel!=0){
sb.append(c);
}else{
resultList.add(String.valueOf(sb));
sb.setLength(0);
}
}else{
sb.append(c);
}
}
resultList.add(String.valueOf(sb));
return resultList;
}
}
合并优化代码,使其更加简洁
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class RegexDemo {
public static void main(String[] args) {
// 初始化字符串
String[] strings=new String[7];
strings[0]="a,b,c";
strings[1]="a,b,(c,d)aa";
strings[2]="a,b,(c,(d,e))";
strings[3]="a,b,(c,d,)";
strings[4]="a,b,(c,d),e";
strings[5]="a,b,(c,d),";
strings[6]="a,b,(c,d,e),f(g,h,(i,j),k)";
for (String str : strings) {
List<String> result = splitIgnoringParentheses(str);
System.out.print(" | ");
Iterator<String> iterator = result.iterator();
while (iterator.hasNext()){
System.out.print(iterator.next()+" | ");
}
System.out.println();
}
}
public static List<String> splitIgnoringParentheses(String input) {
List<String> parts = new ArrayList<>();
int nestedLevel = 0;
StringBuilder sb = new StringBuilder();
for (char c : input.toCharArray()) {
if (c == '(') {
nestedLevel++;
} else if (c == ')') {
nestedLevel--;
}
if (c == ',' && nestedLevel == 0) {
parts.add(sb.toString().trim());
sb.setLength(0);
} else {
sb.append(c);
}
}
parts.add(sb.toString().trim());
return parts;
}
}
结果如图: