我有一个这种格式的文件:
灰色 M 0 0 869 0 0 0 0 0 0 0 0 0 0 0 玛特 M 722 957 0 0 0 0 0 0 0 0 0 0 0 0 阿道夫 M 0 995 0 859 0 646 742 739 708 731 671 649 546 0 莉维亚 F 0 0 0 0 0 0 0 0 0 0 0 0 0 826 米尔 M 0 0 947 0 0 0 0 0 0 0 0 0 0 0 埃斯特 M 0 0 0 793 750 826 0 0 0 0 0 0 0 0 李 F 300 333 278 256 281 310 283 268 218 298 364 955 0 0 石榴石 F 0 704 663 464 421 665 721 0 0 0 0 0 0 0 斯蒂芬 M 0 0 0 922 0 0 757 333 387 395 487 406 721 0 (文件最后一行是空行)
我的方法采用类似“Lee F”的字符串,并将其与文件中一行的前两个标记进行比较。如果它匹配行上的前两个标记,则返回这两个标记,如果它不匹配文件中的任何内容,则告诉用户它没有找到标记。如果名称在文件中,我的程序运行良好,但如果名称不在文件中,则会出错:
线程“主”中的异常 java.util.NoSuchElementException 在 java.util.Scanner.throwFor(未知来源) 在 java.util.Scanner.next(未知来源) 在 Names.findName(Names.java:36) 在 Names.main(Names.java:9)
发生这种情况是因为我的 if 语句检查空行似乎不适用于文件中的最后一个空行,并且我的代码试图从最后一行获取两个标记......为什么它没有跳过在文件中的最后一个空白行?
public static String findName(String nameGend) throws FileNotFoundException {
Scanner input = new Scanner(new File("names.txt"));
while (input.hasNextLine()) {
String line = input.nextLine();
if (!(line.isEmpty())) {
String name= input.next();
String gend= input.next();
String nameGend2= name+ " " + gend;
if (nameGend.equalsIgnoreCase(nameGend2)) {
input.close();
return nameGend2;
}
}
}
input.close();
return "name/gender combination not found";
}