私は同様の質問を検索しましたが、どれも役に立ちませんでした。
ファイルについて考えてみましょう。
こんにちは、元気ですか?
あなたはどこにいた?
すべての行が終わった後、いくつかの操作を実行したいと思います。 next()
を使用すると、最初の行の終わりに到達したときに通知されません。
また、hasNextLine()
を見たことがありますが、別の行が存在するかどうかしかわかりません。
複数のスキャナーを使用することを検討してください。1つは各行を取得し、もう1つは受信後に各行をスキャンします。私がしなければならない唯一の警告は、それを使い終わった後、あなたは必ず内側のスキャナーを閉じなければならないということです。実際には、スキャナーの使用が終了したら、allスキャナーを閉じる必要がありますが、特に内部スキャナーは、リソースを合計して浪費する可能性があるためです。
例えば。、
Scanner fileScanner = new Scanner(myFile);
while (fileScanner.hasNextLine()) {
String line = fileScanner.nextLine();
Scanner lineScanner = new Scanner(line);
while (lineScanner.hasNext()) {
String token = lineScanner.next();
// do whatever needs to be done with token
}
lineScanner.close();
// you're at the end of the line here. Do what you have to do.
}
fileScanner.close();
String.split()
メソッドを使用して、テキストを1行ずつスキャンし、各行をトークンに分割できます。このようにして、1つの行がいつ終了したかを知ることができ、各行にすべてのトークンがあります。
Scanner sc = new Scanner(input);
while (sc.hasNextLine()){
String line = sc.nextLine();
if (line.isEmpty())
continue;
// do whatever processing at the end of each line
String[] tokens = line.split("\\s");
for (String token : tokens) {
if (token.isEmpty())
continue;
// do whatever processing for each token
}
}
私がこれを読んだとき、これが関連しているか、遅すぎるかどうかわかりません。私はJavaに比較的慣れていませんが、同様の問題が発生したときにこれでうまくいくようでした。単純な文字列で示されるファイルの終わり指定子を持つDO-WHILEループを使用しました。
import Java.util.ArrayList;
import Java.util.List;
import Java.util.Scanner;`enter code here`
public class Main {
public static void main(String[] args) {
List<String> name = new ArrayList<>();
Scanner input = new Scanner(System.in);
String eof = "";
do {
String in = input.nextLine();
name.add(in);
eof = input.findInLine("//");
} while (eof == null);
System.out.println(name);
}
}
あなたはスキャナーとあなたが言及した方法を使うことができます:
Scanner scanner = new Scanner(new File("your_file"));
while(scanner.hasNextLine()){
String line = scanner.nextLine();
// do your things here
}