2012-02-13 20 views
53

Javaでは、改行文字と改行文字の両方が同じ効果を示すようです。Javaのcharリテラル ' n'と ' r'の違いは何ですか?

Javaのcharリテラル\n\rの実際の違いは何ですか?上記は\n文字、ないBufferedWriternewLine()機能について尋ねると、そうthis other questionは関連性がないことを


注意。

+0

@ T.J.Crowder:その区別を明確にするのに気をつけてください。 – Will

+1

@ウィル:私はそれが最初は完全にはっきりしていたと思ったが、クローズ票を与えられなかったようだ。私は追記を追加しました。 –

答えて

71

\nは改行コード(LF)、文字コード10です。\rはCR(キャリッジリターン)文字、文字コード13です。これらはシステムによって異なります。たとえば、Windowsでは、テキストファイルの行は、CRとそれに続くLF(CRLFなど)を使用して終了されます。 Unixシステムとその派生型では、LFのみが使用されます。 (Mac OS Xより前のMacはCRを使っていましたが、Mac OS Xは* nixの派生品なのでLFを使用しています)

LFは文字通り、あなたはページ上に水平になっています)、CRは同様にの行の先頭に戻ってを移動させずに、紙を上に移動させるので、CR(左に戻る)とLF用紙を給紙する)。

この混乱のため、出力ターゲットの中には複数の改行シーケンスを受け入れるものがあるため、出力する内容によってどちらの文字からも同じ効果が得られます。

5

違いはJava固有のものではなく、プラットフォーム固有のものです。 歴史的には、UNIXのようなOSは改行文字として\nを使用しましたが、一部の非推奨OSは\rを使用し、Windows OSは\r\nを使用しています。

1

実際に何が結果を印刷するのに使用されているかによって異なります。通常、結果は同じです - あなたが言うのと同じです -

これまでのところ、homeボタンの機能については、キャリッジリターンが想定していました。キャレットを行の先頭に戻します。

\nは、あなたに新しい行を与えますが、キャレットは移動しないと想定されています。

古いプリンタについて考えると、元のキャラクターセットの作者がどのように考えていたのか考えています。これは、紙送り装置の移動とキャレットの移動という別の操作です。これらの2つの文字はその違いを表しています。

13

あなたはどのプラットフォームで作業しているかによって異なります。正しい結果の使用を取得するには - マック
\r\nはWindows形式

のためにあなたはまた、それはあなたに適切なを与えるSystem.getProperty("line.separator")

を取ることができているため、UNIX
\rがあるため

System.getProperty("line.separator") 
39

\nすることですご使用のOSに合わせてください

+5

Java 7以降では、簡単な方法で 'System.lineSeparator()' – Adam6806

+0

を使用することができます。ありがとうございました。 – Arundev

0

コンソール(Eclipse)で文字列を印刷すると、 \ n、\ r、\ r \ nは同じ効果があり、すべてが新しい行を表示しますが、\ n \ r(\ n \ n、\ r \ rも)文字列をファイルに書くと、\ r \ nだけが新しい行を与えることができます。

関連する問題