split切分字符串方法很常用,但会有点小坑,这个坑就在于该方法的第二个参数limit。
先解释一下split方法第二个参数的用法:
limit 参数控制应用模式 的次数,因此会影响生成的数组
的长度。对于此限制,我们有 3 个可能的值:
-
如果限制 n 大于零,则该模式将最多应用 n - 1 次,
数组的
长度将不大于n,并且数组的
的最后一个条目将包含超出最后一个匹配定界符的所有输入。 -
如果n 为非正数,则该模式将被应用尽可能多的次数并且
数组
可以具有任意长度。 -
如果 n 为零,那么该模式将被应用尽可能多的次数,
array
可以是任意长度,尾随的空字符串将被丢弃。
举几个例子,字符串 String str = "、、ss、、、、";
1. String[] split = str.split("、");
limt参数不填时,默认为0,即 str.split("、",0),该结果为["","","ss"]。数组长度为3,且丢弃尾部的所有空字符串。
2. String[] split = str.split("、", 20);
当limit大于等于字符串能切分的最大次数时,结果为["","","ss","","","",""]。数组长度为7,切分到不能切分为止。
3. String[] split = str.split("、", 5);
当limit小于字符串能切分的最大次数时,结果为["", "", "ss", "", "、、"]。数组长度为5,切分5次后停止。
4. String[] split = str.split("、", -1);
当limit为负数时,结果为["","","ss","","","",""]。数组长度为7,也会切分到不可切分为止。常用于不确定可切分次数,且需要保留尾部空字符串的场景。