次の形式のファイルがあります。
灰色 M 0 0 869 0 0 0 0 0 0 0 0 0 0 マート M 722 957 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 826 マール M 0 0 947 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" のような文字列を取り、それをファイル内の行の最初の 2 つのトークンと比較します。行の最初の 2 つのトークンに一致する場合は、2 つのトークンを返します。ファイル内の何も一致しない場合は、トークンが見つからなかったことをユーザーに通知します。名前がファイルにある場合、私のプログラムは正常に実行されますが、名前がファイルにない場合はエラーが発生します。
スレッド「メイン」での例外 java.util.NoSuchElementException java.util.Scanner.throwFor (不明なソース) で java.util.Scanner.next で (不明なソース) Names.findName で (Names.java:36) Names.main(Names.java:9)で
これは、空白行をチェックする if ステートメントがファイルの最後の空白行で機能していないようで、コードがその最後の行から 2 つのトークンを取得しようとしているために発生しています...なぜスキップしないのですか?ファイルの最後の空白行に?
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";
}