有人刚刚在String.split()上提出了一个问题,解决方案就是使用StringTokenizer。 String split comma and parenthisis-JAVA为什么String.split()不在括号上分割?
public static void main(String[] args) {
String a = "(id,created,employee(id,firstname," +
"employeeType(id), lastname),location)";
StringTokenizer tok = new StringTokenizer(a, "(), ");
System.out.println("StringTokenizer example");
while (tok.hasMoreElements()) {
String b = (String)tok.nextElement();
System.out.println(b);
}
System.out.println("Split example");
String[] array = a.split("(),");
for (String ii: array) {
System.out.println(ii);
}
}
输出:
StringTokenizer example
id
created
employee
id
firstname
employeeType
id
lastname
location
Split example
(id
created
employee(id
firstname
employeeType(id)
lastname)
location)
在Scanner vs. StringTokenizer vs. String.Split讨论了String.split()与StringTokenizer,但它并没有解释括号。这是设计的吗?这里发生了什么?
答案 0 :(得分:1)
如果您希望split
拆分字符'('
,')'
,','
和' '
,则需要传递与任何字符匹配的正则表达式那些。最简单的方法是使用字符类:
String[] array = a.split("[(), ]");
通常,正则表达式中的括号是分组运算符,如果您打算将它们用作文字,则必须对其进行转义。但是,在字符类分隔符内,不必转义括号字符。
答案 1 :(得分:-2)
StringTokenizer不支持正则表达式。 StringTokenizer的标记字符“(),”被拆分,因此StringTokenizer代码会在遇到以下任何一个(或)时分割输入,或者
String.split采用正则表达式,括号用于表示不同的表达式。由于括号中没有任何内容,因此将忽略它们,并且仅使用逗号。