2

スキャナーにテキストファイルの入力を読み取らせ、その入力を文字列に入れ、その文字列のStringTokenizerを作成し、その配列の各要素がそのStringTokenizerのトークンであるString[]を作成しようとしています。 。これの目的は、配列の各要素がテキストファイル内の単語になるように、テキストファイルから入力されたテキストのString[]を取得することです。ただし、これまでのコードではNoSuchElementFound例外が生成されます。

    Scanner f = new Scanner(  "input.txt" ); // Yes, I have the file path here, I changed it though. 

    PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("output.txt" );
    String temp = "";
    String cString = "";

    while( ( cString = f.nextLine() ) != null ) { // Line where exception occurs

        temp += cString;
    }
    StringTokenizer everythingTokens = new StringTokenizer( temp );
    String[] everything = new String[ everythingTokens.countTokens() ];

    for( int i = 0; i < everything.length; i++ ) {
        everything[ i ] = everythingTokens.nextToken();
    }

    out.println( everything[ 0 ] );

これがエラーメッセージです

Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Scanner.java:1585)
at gift1.main(gift1.java:21)
Java Result: 1

テキストファイルへの入力は次のとおりです。

Hey,
How are you?

なぜこれが起こっているのですか、どうすれば修正できますか?

4

2 に答える 2

2

それはスキャナーの使い方ではありません。代わりに次のようにします。

while (scanner.hasNextLine()) {
   String line = scanner.nextLine();
   // work with your line here
}

Scanner APIを見てください。行がなくなっても null を返さないことがわかります。代わりに .... NoSuchElementException をスローします。あなたはその使用を BufferedReader の使用と混同していると思いますが、実際には 2 つの完全に異なる種です。

于 2012-07-23T00:38:29.777 に答える
1

これに変更 --

while( f.hasNextLine() ) {
    cString = f.nextLine();
    temp += cString;
}
于 2012-07-23T00:39:10.300 に答える