1

もう一度助けてください。ファイルが存在すると確信しているのに、スキャナーを使用しているときにこの種のエラーが常に発生するのはなぜですか。

java.util.NoSuchElementException:行が見つかりません

ループaを使っての発生数を数えようとしています。forテキストファイルには文の行が含まれています。同時に、文章の正確な形式を印刷したいと思います。

Scanner scanLine = new Scanner(new FileReader("C:/input.txt"));
while (scanLine.nextLine() != null) {
    String textInput = scanLine.nextLine();
    char[] stringArray = textInput.toCharArray();

    for (char c : stringArray) {
        switch (c) {
            case 'a':
            default:
                break;
        }
    }
}
4

3 に答える 3

4
while(scanLine.nextLine() != null) {
    String textInput = scanLine.nextLine();
}

問題はここにあると思います:

あなたのwhile状態では、最後の行をスキャンしてEOFに到達します。その後、ループ本体に入り、次の行を取得しようとしますが、ファイルはすでに最後まで読み取られています。ループ条件をに変更するか、scanLine.hasNextLine()ファイルを読み取る別の方法を試してください。

txtファイルを読み取る別の方法は次のようになります。

BufferedReader reader = new BufferedReader(new InputStreamReader(new BufferedInputStream(new FileInputStream(new File("text.txt")))));

String line = null;

while ((line = reader.readLine()) != null) {
    // do something with your read line
}
reader.close();

またはこれ:

byte[] bytes = Files.readAllBytes(Paths.get("text.txt"));
String text = new String(bytes, StandardCharsets.UTF_8);
于 2012-07-16T07:24:43.373 に答える
2

while条件では、scanner.nextLine()の代わりに:scanner.hasNextLine()を使用する必要があります

Scannerは、次のパターンで機能するIteratorインターフェイスを実装します。

  • 次のアイテムがあるかどうかを確認します(hasNext())
  • 次のアイテムを取得します(next())
于 2012-07-16T07:25:07.953 に答える
1

「a」の出現回数をカウントするには、または文字列内の任意の文字列をカウントするには、次のようにapache-commons-langのStringUtilsを使用できます。

System.out.println(StringUtils.countMatches(textInput,"a"));

文字列を文字配列に変換してから配列全体をループして「a」の出現回数を見つけるよりも効率的だと思います。さらに、StringUtilsメソッドはnullセーフです

于 2012-07-16T07:44:15.773 に答える