2

次のコードを使用して、ある文字列が別の文字列と同じであるかどうか、または文字列の一部であるかどうかを確認しようとしています。

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Scanner;


public class Comparison {

    static void compare() throws FileNotFoundException {

        Scanner queries = new Scanner(new FileReader("./out.txt"));
        Scanner folks = new Scanner(new FileReader("./tal.txt"));
        int index1 = 0;
        while ( queries.hasNextLine() ){
            String check = queries.next();

            while (folks.hasNextLine()) {
                String toCheck = folks.next();
                index1 = toCheck.indexOf(check);
            }//while
        }//while

        System.out.println("Result: "+ index1);
    }
}

しかし、以下のエラーが発生します。

スレッド「メイン」の例外java.util.NoSuchElementException
    java.util.Scanner.throwFor(Scanner.java:838)で
    java.util.Scanner.next(Scanner.java:1347)で
    results.Comparison.compare(Comparison.java:28)で
    results.Main.main(Main.java:42)で

何が問題ですか?どうすればそれを機能させることができますか?

4

2 に答える 2

2

next()ではなくnextLine()を使用する必要があると思います。のように:

String check = queries.nextLine();

と:

String toCheck = folks.nextLine();

デフォルトの区切り文字は空白であるため、ファイルの最後に空白行がある場合(およびその他の場合)、hasNextLine()がtrueを返しても、next()がない可能性があります。使用しているnext*()に対応するhasNext *()メソッドを常に使用してください-(およびその逆;-))。

于 2011-09-20T16:30:37.757 に答える
1

の初期化はfolks、外側のループ内で行う必要があります。次に例を示します。

        Scanner queries = new Scanner(new FileReader("./out.txt"));
        int index1 = 0;
        while ( queries.hasNextLine() ){
            String check = queries.next();
            Reader r = new FileReader("./tal.txt");
            try {
                Scanner folks = new Scanner(r);
                while (folks.hasNextLine()) {
                    String toCheck = folks.next();
                    index1 = toCheck.indexOf(check);
                    if (index1 >= 0) {
                        // Do something with index1 here?
                    }
                }//while
            } finally {
                r.close();
            }
        }//while
于 2011-09-20T16:43:53.307 に答える