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

Pha*_*ate 2 java regex split

给出以下字符串:

String s ="12/15|22:58:25|B|99.502||||A|100.501|||||";
Run Code Online (Sandbox Code Playgroud)

我在打电话

int len = s.split("\\|").length;
Run Code Online (Sandbox Code Playgroud)

无论如何长度是9,而不是13.

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

String s ="12/15|22:58:25|B|99.502||||A|100.501|||lol||";
Run Code Online (Sandbox Code Playgroud)

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

Psh*_*emo 7

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

split("\\|",-1)
Run Code Online (Sandbox Code Playgroud)

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

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

如果限制n大于零,则该模式将最多n应用- 1次,数组的长度将不会大于n,并且数组的最后项将包含超出最后匹配的定界符的所有输入.

如果n的非正则模式将被应用多次可能的,并且阵列可以具有任意长度.

如果n,则图案将被应用的次数成为可能,该阵列可具有任何长度,并且拖尾空字符串将被丢弃.