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]可以正常調用。