使用[a-z]正则表达式在Java中拆分String

时间:2013-07-19 19:53:09

标签: java regex

我有两个regexpressions:

[a-c] : any character from a-c

[a-z] : any character from a-z

测试:

public static void main(String[] args) {
    String s = "abcde";
    String[] arr1 = s.split("[a-c]");
    String[] arr2 = s.split("[a-z]");

    System.out.println(arr1.length); //prints 4 : "", "", "", "de"
    System.out.println(arr2.length); //prints 0 
}

为什么第二次分裂表现得像这样?我希望有一个带有6个空字符串“”结果的reslut。

3 个答案:

答案 0 :(得分:9)

根据the documentation of the single-argument String.split

  

此方法就像通过使用给定表达式和limit参数为零调用双参数split方法一样工作。因此,尾随空字符串不包含在结果数组中。

要保留尾随字符串,可以使用双参数版本,并指定负限制:

    String s = "abcde";
    String[] arr1 = s.split("[a-c]", -1); // ["", "", "", "de"]
    String[] arr2 = s.split("[a-z]", -1); // ["", "", "", "", "", ""]

答案 1 :(得分:5)

默认情况下,split会丢弃尾随空字符串。在arr2的情况下,它们都是空字符串,所以它们都被丢弃了。

要获得6个空字符串,请将负限制作为第二个参数传递给split method,这将保留所有尾随空字符串。

String[] arr2 = s.split("[a-z]", -1);
  

如果n是非正数,那么模式将被应用多次   可能,阵列可以有任何长度。

答案 2 :(得分:0)

String.split()

  

将此字符串拆分为给定正则表达式的匹配项。

周围意味着将删除匹配项。例如,在逗号上拆分“a,b,c”只是a以及bc

第一次拆分会移除a,b和c。

第二个删除所有字母,从而删除该字符串中的所有字符。