を返しますそれはファイルを通過します。JavaのスキャナhasNextLineは、これはおそらく、何よりもコードに精通し、私の不足しているため、よりですが、私は次のような問題を持っておく偽
.hasNextLine()メソッドを使用すると、ファイルに行がさらにあるにもかかわらずfalseを返します。私はファイルが空の行で始まり、内部のテキストに空の行があり、最後に空の行で終わることを指摘しておきます。
しかし、行にテキストがあるかどうかにかかわらず、trueを返すべきではありませんか?
を返しますそれはファイルを通過します。JavaのスキャナhasNextLineは、これはおそらく、何よりもコードに精通し、私の不足しているため、よりですが、私は次のような問題を持っておく偽
.hasNextLine()メソッドを使用すると、ファイルに行がさらにあるにもかかわらずfalseを返します。私はファイルが空の行で始まり、内部のテキストに空の行があり、最後に空の行で終わることを指摘しておきます。
しかし、行にテキストがあるかどうかにかかわらず、trueを返すべきではありませんか?
はい、そうです。
はこれを試してみてください:
public static void main(String[] args){
Test t = new Test();
t.testHNL(new File("test.txt"));
}
public void testHNL(File f){
try {
Scanner s = new Scanner(new FileInputStream(f));
while(s.hasNextLine()){
System.out.println("There is another line! :: "+s.nextLine());
}
System.out.println("There are no more lines :'(");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
ファイル "TEXT.TXT" が存在することを確認し、その中だけキャリッジリターン。その後、これを実行します。
SUN(oracles?)1.5 JDKのソースから取得した次の正規表現に一致するものはすべて "行"として扱われます。これには、Windowsまたはlinux/unixの空行が含まれます。
private static final String LINE_SEPARATOR_PATTERN =
"\r\n|[\n\r\u2028\u2029\u0085]"
キャリッジリターンを除いて行が空であっても、真を返すはずです。
.hasNextLine()
メソッドを使用する代わりに、.hasNext()
メソッドを使用してください。 .hasNextLine()
メソッドは、次の行に内容がある場合にのみtrueを返すため、問題が発生しています。 .hasNext()
メソッドは、次の行にトークンがある場合でもtrueを返します(ここでトークンは次の行の場合\n
です)
私の水晶球ではコードに間違ったことを言っていますが、コードなしで正確な失敗に気付くには弱すぎる、ごめんなさい:p – Voo