同様の質問を検索しましたが、役に立ちませんでした。
ファイルを考えてみましょう:
こんにちは、元気ですか?
あなたはどこにいた?
すべての行が終わった後、いくつかの操作を実行したいと思います。私が使用する場合next()
、それは私が最初の行の終わりに達したときに私に教えてくれません。
また、私は見hasNextLine()
たことがありますが、それは別の行が存在するかどうかを教えてくれるだけです。
同様の質問を検索しましたが、役に立ちませんでした。
ファイルを考えてみましょう:
こんにちは、元気ですか?
あなたはどこにいた?
すべての行が終わった後、いくつかの操作を実行したいと思います。私が使用する場合next()
、それは私が最初の行の終わりに達したときに私に教えてくれません。
また、私は見hasNextLine()
たことがありますが、それは別の行が存在するかどうかを教えてくれるだけです。
複数のスキャナーを使用することを検討してください。1つは各行を取得し、もう1つは受信後に各行をスキャンします。私がしなければならない唯一の注意点は、使い終わったら必ず内側のスキャナーを閉じなければならないということです。実際には、すべてのスキャナーを使い終わったら閉じる必要がありますが、特に内部のスキャナーは、リソースを追加して浪費する可能性があるためです。
例えば、
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
}
}
スキャナーとあなたが言及した方法を使用することができます:
Scanner scanner = new Scanner(new File("your_file"));
while(scanner.hasNextLine()){
String line = scanner.nextLine();
// do your things here
}
私がこれを読んだとき、これが関連しているか、遅すぎるかどうかわかりません。私は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);
}
}