使用索引访问用 String 的 split 方法得到的数组时,需做最后一个分隔符后有无内容的检查,否则会有抛 IndexOutOfBoundsException 的风险。

在使用 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,结果等于 4

for (String s : ary) {
    System.out.println("数组元素:" + s);
}

通过在末尾添加一个额外的空字符串元素,我们确保了最后一个分隔符后的内容不会被忽略,从而得到了预期的数组长度。

附加:

这段代码的目的是在原始数组 ary 的基础上创建一个新的数组 temp,并将原始数组的元素复制到新数组中。然后,在新数组的末尾添加一个额外的空字符串元素,以确保最后一个分隔符后的内容不会被忽略。

具体解释如下:

  1. String[] temp = new String[ary.length + 1];:创建一个新的字符串数组 temp,其长度比原始数组 ary 的长度多1。这是为了在末尾添加额外的空字符串元素。

  2. System.arraycopy(ary, 0, temp, 0, ary.length);:使用 System.arraycopy() 方法将原始数组 ary 中的所有元素复制到新数组 temp 中。这样做是为了保留原始数组的所有元素,并在新数组的基础上进行修改。

  3. temp[temp.length - 1] = "";:将新数组 temp 的最后一个元素(即新添加的额外空字符串元素)设置为空字符串。这样做是为了确保最后一个分隔符后的内容不会被忽略。

  4. ary = temp;:最后,将新数组 temp 赋值给原始数组 ary。这样,原始数组 ary 就变成了包含额外空字符串元素的新数组,以确保最后一个分隔符后的内容不会丢失。

总之,这段代码的作用是在进行字符串分割后,确保分割后的数组包含了最后一个分隔符后可能的空字符串元素,从而避免在使用索引访问数组时出现 IndexOutOfBoundsException 异常。

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值