我正在尝试使用从.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”中
答案 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]));
}