StringTokenizer与String.split?

时间:2017-03-30 16:33:25

标签: java

有人刚刚在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,但它并没有解释括号。这是设计的吗?这里发生了什么?

2 个答案:

答案 0 :(得分:1)

如果您希望split拆分字符'('')'','' ',则需要传递与任何字符匹配的正则表达式那些。最简单的方法是使用字符类:

String[] array = a.split("[(), ]");

通常,正则表达式中的括号是分组运算符,如果您打算将它们用作文字,则必须对其进行转义。但是,在字符类分隔符内,不必转义括号字符。

答案 1 :(得分:-2)

StringTokenizer不支持正则表达式。 StringTokenizer的标记字符“(),”被拆分,因此StringTokenizer代码会在遇到以下任何一个(或)时分割输入,或者

String.split采用正则表达式,括号用于表示不同的表达式。由于括号中没有任何内容,因此将忽略它​​们,并且仅使用逗号。