我有两个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。
答案 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
以及b
和c
。
第一次拆分会移除a,b和c。
第二个删除所有字母,从而删除该字符串中的所有字符。