运行时出现“java.lang.ArrayIndexOutOfBoundsException:1”错误

时间:2014-11-05 21:01:46

标签: java split

程序编译很好,但是当我运行它时,我得到一个错误,更具体地说: java.lang.ArrayIndexOutOfBoundsException:1

正在收到错误:

String name = array[1];

我不确定为什么。

这是带问题的代码:

        infile = new Scanner(new FileReader("EmployeeData.TXT"));
        while(infile.hasNext()){
            String line = infile.nextLine();
            String array[] = line.split(":");
            String name = array[1];
            String id = array[2];
            double salary = Double.parseDouble(array[3]);
            Employee e;
            if (array[0].equals("s")){
                e = new SalariedWorker(id, name, salary);}
            else {
                boolean overtime = Boolean.parseBoolean(array[4]);
                if(overtime){
                    int maxhu = Integer.parseInt(array[5]);
                    e = new HourlyWorker(id, name, salary, maxhu);
                }
                else{
                    e = new HourlyWorker(id, name , salary);
                }
            }
            company.add(e);
        }

作为参考,这是该计划的其余部分:

它读取名为“EmployeeData.TXT”的文本文件:

S       Washington,George       000001      125000
H   MacDonald,Ronald        386218     7.80 true  40
H       Walton,Samuel           268517  8.21    false
H   Thomas,David            131313  9.45    true    38
H   Sanders,HarlandDavid    277651  8.72    false
S   Baron,James         368535  310236

2 个答案:

答案 0 :(得分:4)

您正在分割":"和您的文本文件:

S       Washington,George       000001      125000
H   MacDonald,Ronald        386218     7.80 true  40
H       Walton,Samuel           268517  8.21    false
H   Thomas,David            131313  9.45    true    38
H   Sanders,HarlandDavid    277651  8.72    false
S   Baron,James         368535  310236

没有任何此类角色。所以每个数组的大小都是1。

分割不存在的角色是没有意义的,这让我很好奇为什么你会选择使用":"。我自己,我在白色空间上分开"\\s+"

顺便说一句,这个问题非常适合使用调试器或某些printlns进行调试:

while(infile.hasNext()){
    String line = infile.nextLine();
    System.out.println("Unsplit String: " + line);
    String array[] = line.split(":");
    System.out.println("Split String: " + java.util.Arrays.toString(array));

无论哪种方式,将来当你遇到类似的问题时,都要找出你的变量在错误的时间和地点所持有的东西,这往往会引导你找到问题的根源,从而找到解决方案。

答案 1 :(得分:1)

正在打破这些方面:

    String line = infile.nextLine();
    String array[] = line.split(":");
    String name = array[1];
    String id = array[2];

您正在尝试将array [1]的值赋给name ...但是数组不包含足够的元素。

所以说你有line = "hey"并且你在线调用split,你的数组只有长度为1,因为没有":"分裂的角色。