我有一个项目,我需要帮助修复我的代码才能将文本文件读入数组。我的编码可以打开文件,但到此行时出现“ NoSuchElementException”错误,字符串contactInfo = inFS.nextLine()。trim();。如果我重新制作内部循环,它将陷入无限循环。
以下是该项目的标准,我当前的编码和一些示例数据。任何建议表示赞赏。
方法readContactsFromFile
该方法将从文本文件“ ?????。txt”中读取数据,文件中的每一行均包含名字,姓氏和电话号码(以逗号分隔)。提示:阅读每一行后,请使用分割功能。 split函数将读取由逗号分隔的每个字段,并将其放入数组中。string contactInfo = input.nextLine()。trim(); String [] contactInfoArray = contactInfo.split(“,”);
public static String[][] readContactsFromFile(Scanner scanner) throws IOException {
String [][] contactsArray = new String[MAX_SIZE][MAX_FIELDS];
String inputFileName;
String filename;
FileInputStream contactsStream = null; // File input stream
Scanner inFS = null; // Scanner object
// Try to open file
System.out.print("Enter file name: ");
inputFileName = scanner.next();
filename= inputFileName+".txt";
try {
contactsStream = new FileInputStream(filename);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
inFS = new Scanner(contactsStream);
while(inFS.hasNextLine()){
for(int row=0;row<MAX_SIZE;row++) {
String contactInfo = inFS.nextLine().trim();
String[] contactInfoArray = contactInfo.split(",");
for(int column=0;column<MAX_FIELDS;column++) {
contactsArray [row][column] = contactInfoArray[column];
}
}
}
return contactsArray;
}
从文本文件中采样数据(没有用于分隔记录的其他行):
艾米莉·沃森,913-555-0001
Madison,Jacobs,913-555-0002
Joshua,Cooper,913-555-0003
布兰登,亚历山大,913-555-0004
Emma,Miller,913-555-0005
答案 0 :(得分:1)
您的文件行数少于MAX_SIZE。如果删除for(int row=0;row<MAX_SIZE;row++)
,则创建一个变量row
,并在每次迭代中将其递增,这将是一回事。您还需要while(inFS.hasNextLine() && row < MAX_SIZE)
来进一步限制循环。
答案 1 :(得分:0)
我注意到您的代码可以通过一些帮助进行清理,因为其中有很多多余的东西,可能会引起混乱。
Scanner sc = new Scanner("Test.txt");
String line;
while(!(line = sc.nextLine()).equals("")){
String[] elems = line.split(",");
//implement the rest of the code
}
这将能够完成您要使用代码执行的所有操作。
如前所述,您阅读了两次。在这里
while(!(line = sc.nextLine()).equals(""))
通过首先调用将nextLine存储在变量行中,然后检查是否为null来解决此问题。