在使用 split 方法时,如果分隔符在字符串的末尾连续出现,那么 split 方法会将末尾的空字符串部分忽略掉。这就导致了数组长度比预期要少的情况,从而可能引发 IndexOutOfBoundsException 异常。
例子:
String str = "a,b,c,,";
String[] ary = str.split(",");
System.out.println("数组长度:" + ary.length); // 预期大于 3,结果等于 3
for (String s : ary) {
System.out.println("数组元素:" + s);
}
在上面的代码中,字符串 "a,b,c,," 使用逗号作为分隔符进行了分割,预期得到的数组长度应该大于 3,因为有四个逗号分隔出了五个部分。然而,实际上,由于最后两个逗号之间没有内容,split 方法会忽略这部分内容,因此得到的数组长度为 3,而不是预期的大于 3。
为了避免这种情况,我们可以在使用索引访问 split 方法得到的数组时,进行额外的检查,确保最后一个分隔符后是否有内容。如果最后一个分隔符后为空,我们可以将其作为一个有效的分隔符对待,以确保得到预期的数组长度。下面是修改后的代码:
String str = "a,b,c,,";
String[] ary = str.split(",");
// 额外的检查,如果最后一个分隔符后为空,则将其作为一个有效的分隔符对待
if (str.endsWith(",")) {
// 在末尾添加一个额外的分隔符
String[] temp = new String[ary.length + 1];
System.arraycopy(ary, 0, temp, 0, ary.length);
temp[temp.length - 1] = "";
ary = temp;
}
System.out.println("数组长度:" + ary.length); // 预期大于 3,结果

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



