如果在字符串的最后部分,则String.split()忽略中间分隔符之间的空值

时间:2015-04-30 15:54:50

标签: java regex split

给出以下字符串:

String s ="12/15|22:58:25|B|99.502||||A|100.501|||||";

我正在打电话

int len = s.split("\\|").length;

无论如何长度是9,而不是13应该是。

然而,如果我以这种方式修改所述字符串:

String s ="12/15|22:58:25|B|99.502||||A|100.501|||lol||";

长度是13! 为什么看起来java似乎进行了某种优化,这不是必需的,因为字符串的那些部分可以填充在其他一些上下文中......

1 个答案:

答案 0 :(得分:7)

默认情况下split从结果数组中删除空尾随字符串。要关闭此机制,请使用带有负限制的split(regex, limit),如

split("\\|",-1)

更多细节:
split(regex)在内部返回split(regex, 0)的结果,在此方法的documentation中,您可以找到(强调我的)

  

limit参数控制模式的应用次数,因此会影响结果数组的长度。

     

如果限制n 大于零,则模式最多应用n - 1次,数组的长度不大于n,并且数组的最后一个条目将包含除最后匹配分隔符之外的所有输入。

     

如果n 非正面,则模式将被应用尽可能多次,并且数组可以具有任意长度。

     

如果n ,则模式将被应用尽可能多次,数组可以具有任意长度,尾随空字符串将被丢弃