java以特定pattern分割字符串到ArrayList,pattern为n个(任意字符串但不含左右括号字符),n=自然数

例如 A(B)C(D)(E)F 分割为 A, (B), C, (D)(E), F 共5个子串,要求复制代码即用

按照你的要求编写的分割字符串到ArrayList的Java程序如下:(用到了正则表达式)
Java正则表达式为:[A-Za-z]|(\\([A-Za-z]\\))+
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class AAA {
public static void main(String[] args) {
ArrayList al=new ArrayList();
String pattern="A(B)C(D)(E)F";
String regex="[A-Za-z]|(\\([A-Za-z]\\))+";
Pattern p=Pattern.compile(regex);
Matcher m=p.matcher(pattern);
while(m.find()){
al.add(m.group());
}
System.out.print(al.toString());
}
}
运行结果:
[A, (B), C, (D)(E), F]追问

pattern = "(str1(STR1)str2(STR21)(STR22)str3)";
此时你的运行结果是
[s, t, r, S, T, R, s, t, r, S, T, R, S, T, R, s, t, r]
而我希望的是
str1, STR1, str2, ((STR21)(STR22), str3 5个元素

就是说只有(和)是特殊字符

追答

根据你的新要求,
正则表达式为:[A-Za-z0-9]+|(\([A-Za-z0-9]+?\))+
完整的Java程序如下:
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class AAA {
public static void main(String[] args) {
ArrayList al=new ArrayList();
String pattern="(str1(STR1)str2(STR21)(STR22)str3)";
String regex="[A-Za-z0-9]+|(\\([A-Za-z0-9]+?\\))+";
Pattern p=Pattern.compile(regex);
Matcher m=p.matcher(pattern);
while(m.find()){
al.add(m.group());
}
System.out.print(al.toString());
}
}
运行结果:
[str1, (STR1), str2, (STR21)(STR22), str3]

追问

非常好,还差一点点
String regex="[A-Za-z0-9]+|(\\([A-Za-z0-9]+?\\))+";

这里只是包含A-Za-z0-9,我是支持希望除了(和)以外的任意字符

String pattern="(str1(STR1)str2(STR21)(STR22)str3)";
只是示例,比如str1可以为 %a^b&,只要不包含(和)的正则

追答

给你个通用的正则表达式:[^\(\)]+|(\([^\(\)]+?\))+
完整的Java程序如下:
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class AAA {
public static void main(String[] args) {
ArrayList al=new ArrayList();
String pattern="(%a^b&(STR1)str2(STR21)(STR22)str3)";
String regex="[^\\(\\)]+|(\\([^\\(\\)]+?\\))+";
Pattern p=Pattern.compile(regex);
Matcher m=p.matcher(pattern);
while(m.find()){
al.add(m.group());
}
System.out.print(al.toString());
}
}
运行结果:
[%a^b&, (STR1), str2, (STR21)(STR22), str3]

温馨提示:答案为网友推荐,仅供参考
相似回答