2011-07-15 6 views
2

を返しますそれはファイルを通過します。JavaのスキャナhasNextLineは、これはおそらく、何よりもコードに精通し、私の不足しているため、よりですが、私は次のような問題を持っておく偽

.hasNextLine()メソッドを使用すると、ファイルに行がさらにあるにもかかわらずfalseを返します。私はファイルが空の行で始まり、内部のテキストに空の行があり、最後に空の行で終わることを指摘しておきます。

しかし、行にテキストがあるかどうかにかかわらず、trueを返すべきではありませんか?

+11

私の水晶球ではコードに間違ったことを言っていますが、コードなしで正確な失敗に気付くには弱すぎる、ごめんなさい:p – Voo

答えて

2

はい、そうです。

はこれを試してみてください:

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" が存在することを確認し、その中だけキャリッジリターン。その後、これを実行します。

1

SUN(oracles?)1.5 JDKのソースから取得した次の正規表現に一致するものはすべて "行"として扱われます。これには、Windowsまたはlinux/unixの空行が含まれます。

private static final String LINE_SEPARATOR_PATTERN = 
    "\r\n|[\n\r\u2028\u2029\u0085]" 

キャリッジリターンを除いて行が空であっても、真を返すはずです。

1

.hasNextLine()メソッドを使用する代わりに、.hasNext()メソッドを使用してください。 .hasNextLine()メソッドは、次の行に内容がある場合にのみtrueを返すため、問題が発生しています。 .hasNext()メソッドは、次の行にトークンがある場合でもtrueを返します(ここでトークンは次の行の場合\nです)

関連する問題