1.split(String regex, int limit)
参数说明:
regex 表示字符串分割的模式,包括分隔符和正则表达式;
limit 表示控制模式应用的次数,会影响所得数组的长度。
limit>0:模式将被最多应用 n - 1 次,数组的长度将不会大于 n,而且数组的最后一项将包含所有超出最后匹配的定界符的输入;
limit<0:模式将被应用尽可能多的次数,而且数组可以是任何长度;
limit=0:模式将被应用尽可能多的次数,数组可以是任何长度,并且结尾空字符串将被丢弃。
2.split(String regex) 本质上就是limit为0时的情况,详见JDK源代码:
public String[] split(String regex) {
return split(regex, 0);
}
3.场景测试
测试样例1:limit设置为3
@Test
void caseOne(){
String str = "a|b|c||";
String[] arr = str.split("\\|", 3);
System.out.println(arr.length);
System.out.println(Arrays.toString(arr));
}
输出结果:
3
[a, b, c||]
备注:数组长度为3,最后一项为c||,即arr[2]为"c||"。
测试样例2:limit设置为-1
@Test
void caseTwo(){
String str = "a|b|c||";
String[] arr = str.split("\\|", -1);
System.out.println(arr.length);
System.out.println(Arrays.toString(arr));
}
输出结果:
5
[a, b, c, , ]
备注:数组长度为5,最后两项是空字符串,即arr[3]为"",arr[4]为""。
测试样例3:limit设置为0
@Test
void caseThree(){
String str = "a|b|c||";
String[] arr = str.split("\\|", 0);
System.out.println(arr.length);
System.out.println(Arrays.toString(arr));
}
输出结果:
3
[a, b, c]
备注:因结尾空字符串将被丢弃,所以数组长度为3,此时如果调用arr[3],就会报数组越界异常(java.lang.ArrayIndexOutOfBoundsException: 3)。
测试样例4:不带limit参数
@Test
void caseFour(){
String str = "a|b|c||";
String[] arr = str.split("\\|");
System.out.println(arr.length);
System.out.println(Arrays.toString(arr));
}
输出结果:
3
[a, b, c]
备注:因结尾空字符串将被丢弃,所以数组长度为3,此时如果调用arr[3],就会报数组越界异常(java.lang.ArrayIndexOutOfBoundsException: 3)。
测试样例5:结尾为空格字符时的情况
@Test
void caseFive(){
String str = "a|b|c| | ";
String[] arr = str.split("\\|");
System.out.println(arr.length);
System.out.println(Arrays.toString(arr));
}
输出结果:
5
[a, b, c, , ]
备注:此时arr[3]可以正常调用。