Java システムに合った改行コード(CR・LF)を取得する




Windows、UNIX、Macで、改行コードが違うことはよく知られています。
違う改行コードを入れると、改行されなかったりします。
そんなわけで、ふつうはJavaを実行するシステムに合わせて、改行コードを入れる必要があるのです。

そもそも改行コードの違い

改行コードの種類と意味

改行コードは3つあります。
改行コードは、タイプライターの動作を示しています。
※タイプライター:少し前にあったワープロのような、文章を書くためのもの。電源なんて当然なし。機械だけで動作。ボタンを押すとその文字のハンコが、紙に押し出される。ハンコと紙の間にカーボン紙がセットされているので、ハンコの圧力でインクが紙に転写される仕組み。

CR(きゃりっじりたーん)

このハンコを打つときに、1文字ずつ自動でズレることで、連続して文字を打てる仕組みになってます。
このハンコのズレを左端に戻すことを「キャリッジ・リターン」と呼びます。
つまり、「行の先頭に印字位置を戻せ」ということです。

LF(らいんふぃーど)

ハンコは左右だけ移動することができます。上下の行移動は、紙を上下にズラすとできます。
この行移動のうち、次の行に移動(送る)ことを「ラインフィード」と呼びます。
つまり、「次の行を打ちたいんだから、次の行に行け」ということです。

CR+LF

説明するまでもないですが・・、合わせ技です(;´Д`)
次の行を先頭から打ちたいので、「ハンコの位置を左に戻して、紙を次の行に送る」ということです。
実態に即しているのは、これかもしれません。。

OSごとの違い

各OSでの違いは、こんな感じです。

改行コード OS
CRLF Windows
CR Mac(OS 9まで)
LF UNIX系全般、Mac(OS X以降)

 

Javaで改行する

ストリームへの出力時に改行したい

xxx#print(String)とかxxx#println(String)を使うケースであれば、printlnを使えば、何も考えなくても、Javaプログラムが実行されているシステムに合った改行コードがセットされます。

自分で書いたStringで改行したいんだけど・・

はい、本題はこちらです。
Javaではシステムに合った改行コードが用意されています。
これを利用して、改行コードを埋め込むことができます。

改行サンプル

3パターン用意しました。どれも改行しますw
1つ目は、printlnにお任せパターン。
2つ目は、「System#lineSeparator()」で改行コードを取得して利用するパターン。
3つ目は、「System#getProperty(String)」で改行コードを取得して利用するパターン。
ちなみに、「System#lineSeparator()」は、内部的に「System#getProperty(String)」を利用しています。

実行結果