如何修复Java中的``ava.lang.ArrayIndexOutOfBoundsException:索引1超出长度1的界限''错误

时间:2019-10-07 02:33:11

标签: java oop bluej

我正在尝试使用从.txt文件中提取的数据来创建“ PhoneEntry”类的实例。 .split()似乎有效地创建了一个数组(信息),该数组包含文档中每行的三个值(名字,姓氏和电话号码),但是在尝试创建时出现了超出范围的错误使用array [index]公式调用每个值的“ PhoneEntry”类的实例。我设法打印了info数组中的所有索引,因此它们包含正确的值,但是无法使用它们创建新的“ PhoneEntry”。

到目前为止,我有...

1)打印所有值,以确保filereader循环正在正确地组装“信息”数组

2)打印出信息数组的长度。它返回了五个“ 3”和一个“ 1”。应该只有5个数组,因为phonebook.txt中只有5行内容,但是也许有一个秘密的'/ n'之类的东西,如果是这样,我将如何删除该字符?

PhoneBook()   // constructor for the phone book
    {
        try {
            BufferedReader bufferedReader = new BufferedReader(new FileReader("C:\\Users\\HP\\Desktop\\javaprojects\\phonebook2\\phonebook.txt");
            String line;
            try {
                while ((line = bufferedReader.readLine()) != null) {
                    String[] info = line.split(" ");
                    System.out.println(info[0] + " " + info[1] + " "+info[2]);
                    phoneBook.add(new PhoneEntry(info[0], info[1], info[2]));
                }
                bufferedReader.close();
            } catch (IOException e2){
                e2.printStackTrace();
            }
        } catch (FileNotFoundException e1){
            e1.printStackTrace();
        }


    }

.txt文件:


Ali Katt (312)223-1937
Ima Knob (860)399-3044
Jo King (913)883-2874
Stew Pid (651)698-4631
Ug Lee (815)439-9271

确切的错误消息是:

java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1
    at PhoneBook.<init>(PhoneBook.java:16)
    at PhoneBookTester.main(PhoneBookTester.java:10)

第16行引用了print语句,但是实际上所有值(包括最后一个索引(2))都被正确打印了。在打印声明出现之前,该错误涉及新的phoneEntry。

我需要它来实际创建“ PhoneEntry”的实例并将其添加到数组列表“ phoneBook”中

1 个答案:

答案 0 :(得分:0)

您的程序假定每行始终至少有2个空格。

如果有空白行或行中少于2个空格,则您将尝试检索info中不存在的值,因此检索ArrayIndexOutOfBoundsException

if (info.length == 3) {
   System.out.println(info[0] + " " + info[1] + " " + info[2]);
   phoneBook.add(new PhoneEntry(info[0], info[1], info[2]));
}