Windows、UNIX/最近のMac、昔のMac(OS)で、改行コードが違うことはよく知られています。
違う改行コードを入れると、正しく認識されずに改行されなかったりします。
よって、Javaを実行するシステムに合わせて、改行コードを入れる必要があります。
オペレーティングシステム(OS)によって違う改行コード・・・
改行コードの種類と意味
改行コードは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ではシステムに合った改行コードが用意されています。
これを利用して、改行コードを埋め込むことができます。
システムに合った改行コード(CR・LF)を取得するサンプル
3パターン用意しました。どれも改行しますw
1つ目は、printlnにお任せパターン。
2つ目は、「System#lineSeparator()」で改行コードを取得して利用するパターン。
3つ目は、「System#getProperty(String)」で改行コードを取得して利用するパターン。
ちなみに、「System#lineSeparator()」は、内部的に「System#getProperty(String)」を利用しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | public class LineSeparatorTest { private static final String CR = System.lineSeparator(); private static final String CR2 = System.getProperty("line.separator"); public static void main(String[] args) { //printlnに任せる System.out.println("-- 何も考えないで改行 --"); System.out.println("改行なんてお任せ!"); //System#lineSeparator()で改行 StringBuilder sb = new StringBuilder(); sb.append("-- System#lineSeparator()で改行 --").append(CR); sb.append("自分で改行してみた").append(CR); System.out.print(sb.toString()); //System# StringBuilder sb2 = new StringBuilder(); sb2.append("-- System#getProperty(String)で改行 その2 --").append(CR2); sb2.append("自分で改行してみた").append(CR2); System.out.print(sb2.toString()); } } |
実行結果
1 2 3 4 5 6 | -- 何も考えないで改行 -- 改行なんてお任せ! -- System#lineSeparator()で改行 -- 自分で改行してみた -- System#lineSeparator()で改行 その2 -- 自分で改行してみた |