给出以下字符串:
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似乎进行了某种优化,这不是必需的,因为字符串的那些部分可以填充在其他一些上下文中......
答案 0 :(得分:7)
默认情况下split
从结果数组中删除空尾随字符串。要关闭此机制,请使用带有负限制的split(regex, limit)
,如
split("\\|",-1)
更多细节:
split(regex)
在内部返回split(regex, 0)
的结果,在此方法的documentation中,您可以找到(强调我的)
limit
参数控制模式的应用次数,因此会影响结果数组的长度。如果限制
n
大于零,则模式最多应用n - 1次,数组的长度不大于n,并且数组的最后一个条目将包含除最后匹配分隔符之外的所有输入。如果
n
非正面,则模式将被应用尽可能多次,并且数组可以具有任意长度。如果
n
零,则模式将被应用尽可能多次,数组可以具有任意长度,尾随空字符串将被丢弃