Java中String.split()返回结果长度不符预期的原因咨询
问题原因分析
首先,这是因为Java中String.split()方法的默认行为会忽略分割后末尾的空字符串。
咱们拆解一下你的例子:
- 原始字符串:
"DK4..||VSDK4|" - 按
|分割的话,实际会得到四个部分:"DK4.."、""(两个|之间的空内容)、"VSDK4"、""(最后一个|后面的空内容)
但你调用的是无第二个参数的split("\\|"),它等价于调用split("\\|", 0)。根据Java的设计逻辑,当第二个参数为0时,方法会自动丢弃分割结果末尾的所有空字符串,所以最后那个""被丢掉了,最终数组长度就变成了3。
解决办法
如果想要保留所有的空字符串(包括末尾的),只需要给split()方法传入第二个参数-1即可:
String data = "DK4..||VSDK4|"; String[] tokens = data.split("\\|", -1); System.out.println(tokens.length); // 输出4,符合预期
这里补充一下第二个参数的作用细节:
- 当参数
>0:最多分割指定次数,末尾空串会保留 - 当参数
=0:分割尽可能多次,但会丢弃末尾所有空串 - 当参数
<0:分割尽可能多次,保留所有空串(包括开头和末尾的)
内容的提问来源于stack exchange,提问作者Kedar S. Dixit
相关产品推荐
相关产品推荐

