Java中使用split方法丢失数据问题
看下面这段代码:
String s = "1,,,,2,3,4,,";
String[] split = s.split(",");
System.out.println(split.length);
System.out.println(new ArrayList<>(Arrays.asList(split)));
输出如下
7
[1, , , , 2, 3, 4]
看到这结果并不对,最后两个,,背丢弃了,看源码发现,split方法的默认方法中,会丢弃字符串末尾的空值,但不会被丢弃字符串中间的空值,这就是我们上面看到的结果。
但是split还有一个方法,可以传递参数进去,split(String regex, int limit),第一个参数是我们需要的字符串,第二个limit是一个长度参数,默认为0,所以会丢弃末尾空数据,当limit大于0时,代表分割字符串后数组的最大长度;当它小于0时,代表获取数组所有值,不会丢弃末尾空值。因此要想保留完整的数据,把limit设置为-1即可。再次修改代码如下:
String s = "1,,,,2,3,4,,";
String[] split = s.split(",", -1);
System.out.println(split.length);
System.out.println(new ArrayList<>(Arrays.asList(split)));
结果就和我们想要的一样了:
9
[1, , , , 2, 3, 4, , ]