提问者:小点点

字符串#拆分。极限参数的副作用


JDK中存在以下拆分重载签名

public String[] split(String regex, int limit)

始终我认为该限制是字符串将被拆分的最大标记数。

例如:

 System.out.println(Arrays.toString("Andrew Carnegie:35:USA".split(":")));

出局:

[Andrew Carnegie, 35, USA]
System.out.println(Arrays.toString("Andrew Carnegie:35:USA".split(":",2)));

出来

[Andrew Carnegie, 35:USA]

但我注意到1更多的效果

System.out.println(Arrays.toString("Andrew Carnegie:35:USA:".split(":")));

出局:

[Andrew Carnegie, 35, USA]

 System.out.println(Arrays.toString("Andrew Carnegie:35:USA:".split(":",-1)));

出局:

[Andrew Carnegie, 35, USA, ]

因此,如果字符串以分隔符结尾,则添加一个空元素。

在哪里可以找到有关此效果的具体信息?


共2个答案

匿名用户

引用Johannes Wei:

“当调用String.split(String)时,它调用String.plit(String,0),当用n调用String.split(字符串,n)时,会丢弃后面的空字符串(如文档所说)

匿名用户

从JavaDoc for split:

限制参数控制应用模式的次数,因此会影响生成数组的长度。如果限制n大于零,则模式最多应用n-1次,数组的长度不大于n,数组的最后一个条目将包含最后匹配分隔符之外的所有输入。如果n为非正,则模式将被应用尽可能多的次数,数组可以有任何长度。如果n为零,则模式将被应用尽可能多的次数,数组可以有任何长度,尾随的空字符串将被丢弃。

强调我的。

所以

    < li >如果< code>n严格为正数,则结果数组中的元素数将受< code>n的限制 < li >如果< code>n为零,则数组可以是任意长度,尾随空格将被丢弃 < li >如果< code>n严格为负,则数组可以具有任意长度,并且尾随空格不会被丢弃