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似乎只进行某种优化,这不是必需的,因为字符串的那些部分可以填充在其他一些上下文中……
解决方法:
默认情况下,split会从结果数组中删除空尾随字符串.要关闭此机制,请使用具有负限制的split(正则表达式,限制)
split("\\|",-1)
更多细节:
split(regex)在内部返回split(regex,0)的结果,在这个方法的documentation中你可以找到(强调我的)
The limit parameter controls the number of times the pattern is applied and therefore affects the length of the resulting array.
If the limit n is greater than zero then the pattern will be applied at most n – 1 times, the array’s length will be no greater than n, and the array’s last entry will contain all input beyond the last matched delimiter.
If n is non-positive then the pattern will be applied as many times as possible and the array can have any length.
If n is zero then the pattern will be applied as many times as possible, the array can have any length, and trailing empty strings will be discarded.
标签:java,regex,split
来源: https://codeday.me/bug/20191002/1844745.html