JAVA String的split方法小结

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章