串#分裂。限制参数的副作用

时间:2014-04-21 10:21:11

标签: java string split

在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]

但我注意到了另外一个效果

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 个答案:

答案 0 :(得分:1)

引用JohannesWeiß

“当调用String.split(String)时,它调用String.split(String,0)并且当使用n&lt调用String.split(String,n)时,它会丢弃尾随空字符串(如文档所说) ; 0它不会丢弃任何东西。“

答案 1 :(得分:0)

来自split的{​​{3}}:

  

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

强调我的。

所以,

  • 如果n严格为正,那么结果数组中的元素数量将受n
  • 的限制
  • 如果n为零,则数组可以具有任何长度,并且尾随空格将被丢弃
  • 如果n严格为负数,那么数组可以有任何长度,并且不会丢弃尾随空格