Java IndexOutOfBoundException

时间:2013-11-19 20:20:12

标签: java

我正在尝试从文本文件中读取,但是我收到此错误,我无法弄清楚如何修复它。

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1

和我的代码

try {
String scan;
FileReader file = new FileReader("C:\\Users\\W7\\workspace\\Lab 8\\students.txt");
BufferedReader br = new BufferedReader(file);
while((scan = br.readLine()) != null) {
    String values = scan;
    String[] val = values.split("\t");
    String[] vals;
    vals = val[0].split(":");
    int size = val.length;
    System.out.println(vals[1]);
    switch (size) {
        case 3 :
        vals = val[0].split(":");
        int id = Integer.parseInt(vals[1]);
        vals = vals[1].split(":");
        String name = val[1];
        vals = val[2].split(":");
        int grade = Integer.parseInt(vals[1]);
        Student st = new Student(id, name, grade);
        } catch (IOException e) {
            System.out.println(e.getStackTrace());
        }

我的文字文件

ID:5    Name:john   Grade:6

ID:6    Name:paul   Grade:10

3 个答案:

答案 0 :(得分:2)

在访问第一个或第二个元素之前,vals的长度是未知的:

String[] vals;
vals = val[0].split(":");
System.out.println(vals[1]);

甚至在访问索引0处的元素之前,您需要通过检查其长度来确保val不是空数组。例如,当您在输入中遇到一条甚至没有标签的空行时,就会发生这种情况。

答案 1 :(得分:1)

错误是您在检查vals[1]的长度之前使用vals的位置。

vals = val.contains(":") ? val[0].split(":") : null;
int size = (vals == null) ? 0 : vals.length; // which is the array I think you want
System.out.println(vals[1]);
switch (size) {
    ...
}

答案 2 :(得分:0)

                String values = scan;
                String[] val = values.split("\t");
                String[] vals;
                vals = val[0].split(":");
                int size = val.length;
                System.out.println(vals[1]);

您确定上面的代码可以处理空白行吗?您假设每一行至少有一个“:”