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, , ]
 
posted @ 2022-08-17 09:10  Night2022  阅读(765)  评论(0编辑  收藏  举报