拆分字符串后获取数组索引超出绑定异常

问题描述 投票:0回答:2

拆分字符串后,如果索引的最后一个值在那里,那么我没有得到任何异常。 '''

 public class Digits {
        public static void main(String[] args) {
            String s = "123;456;;;777;000";
            String field[] = s.split(";");
            System.out.println(field.length);
            System.out.println(field[5]);
    
        }

}

''' 输出是 ---> s[5] = 000

'''

public class Digits {
    public static void main(String[] args) {
        String s = "123;456;;;;";
        String field[] = s.split(";");
        System.out.println(field.length);
        System.out.println(field[5]);

    }

}

''' 输出是----> ArrayindexoutofBoundException

我期待空值,但它抛出错误

java indexoutofboundsexception
2个回答
1
投票

如果你使用替代方法,它不会抛出错误

String s = "123;456;;;;";
String field[] = s.split(";", -1);
System.out.println(field.length);
System.out.println(field[5]);

根据单参数版本

因此结果中不包含尾随的空字符串 数组。

但是使用 2 参数版本

如果 n 是非正数,那么该模式将被应用尽可能多的次数


0
投票

当你使用

String field[] = s.split(";");
时,实际的调用方式是
split(";",-1)
.

limit=0
时,方法
split
通过移除空元素构造结果如下:

这就是

s = "123;456;;;777;000"
没有得到任何异常,但是
s = "123;456;;;;"
得到错误的原因。

总结一下,如果你想得到""值,你可以assgin

limit = -1 or other inegative number
(前提是你不想限制
split
的范围),例如:

String field[] = s.split(";", -1);
String field[] = s.split(";", -2);
© www.soinside.com 2019 - 2024. All rights reserved.