0
FileReader reader = new FileReader("d:\\UnderTest\\AVS\\tester.txt");
       char ch; 
       int x;
       while( ( x = reader.read() ) != -1 ) {
              // I use the following statement to detect EOL
              if( Character.toString((char)x) == System.getProperty("line.separator") ) {
                  System.out.println("new line encountered !");
              } System.out.print( (char)x );
       }

このコードでは、tester.txt新しい行に 2 つの文が書かれていますが、if ステートメントは機能しません。どうしてこんなことに ?

4

3 に答える 3

2

一部の人が言及したように、システム プロパティline.separatorは複数の文字を返す場合があります。たとえば、Windows では\r\n.

ユースケースによっては、BufferedReader::readLine()行全体を直接読み取り、手動で比較する必要がないようにする方がよい場合があります。

于 2011-08-13T05:40:44.063 に答える
1
  1. によって返される文字列はSystem.getProperty("line.separator")? 複数の文字"\r\n"ですか?単一の文字が、複数の文字を含む文字列と等しくなることはありません。
  2. ただし、さらに基本的には、コードでは==なくString.equals(). 文字列の等価性をチェックするときは、決して使用しないで==ください。常に使用String.equals()

    FileReader reader = new FileReader("d:\\UnderTest\\AVS\\tester.txt");
    char ch; 
    int x;
    final String linesep = System.getProperty("line.separator");
    while( (x = reader.read()) != -1 )
    {
        if( linesep.equals(Character.toString((char)x)) )
        {
            System.out.println("new line encountered !");
        }
        System.out.print( (char)x );
    }
    
于 2011-08-13T05:34:42.750 に答える
0

クロスプラットフォームの問題が関係する可能性があるかどうかはあなたの質問からわかりませんが、この問題を説明できるプラットフォーム (Unix と DOS など) 間で認識される改行文字にいくつかの違いがあります。よくわかりませんが、メモ帳は「/r/n」を使用していると思いますが、コードでは行区切りとして認識されない可能性があります。

ウィキペディアを見てください-改行

具体的には、このセクションでは次のように説明しています。逆に、Unix システムで Windows コンピュータから作成されたファイルを表示すると、余分な CR が各行の末尾に ^M として表示されるか、2 番目の改行として表示される場合があります。 "

それが役立つことを願っています。

于 2011-08-13T05:33:31.620 に答える