Javaでは、改行文字と復帰文字はどちらも同じ効果を示しているようです。
Javaの文字リテラル\n
と\r
の実際の違いは何ですか?
上記では、BufferedWriter
のnewLine()
関数ではなく、\n
characterについて尋ねていることに注意してください。 この他の質問 は関係ありません。
\n
は改行(LF)文字、文字コード10です。\r
は復帰(CR)文字、文字コード13です。これらの機能はシステムによって異なります。たとえば、Windowsでは、テキストファイル内の行は、CRの直後にLF(例:CRLF)を使用して終了します。 Unixシステムとその派生システムでは、LFのみが使用されます。 (Mac OS Xより前のMacはCRを使用していましたが、Mac OS Xは* nix派生物なので、LFを使用します。)
昔は、LFは文字通りプリンターの改行を行い(ページの水平方向に移動せずに1行下に移動)、CRも同様に行の先頭に戻りましたなし用紙を上に移動するため、一部のシステム(Windowsなど)はCR(左側に戻る)とLF(および用紙を上に送ります)を送信します。
この混乱のために、出力ターゲットの中には複数の改行シーケンスを受け入れるものがあるため、出力先に応じてどちらの文字からも同じ効果が得られます。
\n
はUNIX用です\r
はMac用です(OS Xより前)\r\n
はWindows形式用です
System.getProperty("line.separator")
を取ることもできます
oSに適切なものを提供します
使用するプラットフォームによって異なります。正しい結果を得るには-
System.getProperty("line.separator")
違いはJava固有ではなく、プラットフォーム固有です。歴史的に、UNIXライクなOSは改行文字として\n
を使用していましたが、一部の非推奨OSは\r
を使用し、Windows OSは\r\n
を使用していました。
実際には、結果の出力に使用されているものに依存します。通常、あなたが言うように、結果は同じです-
歴史的に、キャリッジリターンはhome
ボタンが行うことについて行うことになっています。キャレットを行の先頭に戻します。
\n
は、新しい行を提供するものの、キャレットを移動するものではありません。
古いプリンタについて考えると、文字セットの元の作者がどのように考えていたかをかなり考えていることになります。これは、給紙装置とキャレットを移動する別の操作です。これらの2つの文字はその違いを表しています。
Console(Eclipse)で文字列を印刷すると、\ n、\ rおよび\ r\nが同じ効果を持ち、それらはすべて新しい行を提供しますが、\ n\r(また\ n\n、\ r\r)は2つの新しい行を提供します。ファイルに文字列を書き込むと、\ r\nのみが新しい行を提供できます。