WindowsとLINUX(UNIX系)では改行コードが違います。Windowsでは CRLF で、UNIX系全般では LF です。表にすると次のようになります。
改行コード | OS | エスケープ文字 |
<LF> | UNIX | ¥n |
<LF> | Linux | ¥n |
<CR><LF> | Windows | ¥r¥n |
<LF> | Android OS | ¥n |
改行コードは表記文字の省略で、CRがcarriage returnの省略で意味は「復帰」、LFがline feedの省略で意味は「改行」です。それぞれ詳細に意味を見ていきます。
CR(carriage return)
carriage returnの略です。carriageをreturnしろということですね。carriageをGoogle翻訳にかけてみると送るみたいなイメージの単語のようですね。
returnは帰還とかの意味なので、最初の場所に送るみたいなことですね。最初の場所は行の先頭なので、行の先頭に(カーソルを)送ると考えると分かりやすいです。詳細:Wikipedia
LF(line feed)
line feedの略です。lineをfeedしろってことですね。lineは行、feedはGoogle翻訳をかけてみてもフィードだとか食料のことばかり出るので不明です。
ここではlineに対しての命令と分かれば事足ります。改行の中の処理として考えると、次の行に行けという命令ですね。
UNIX系では次の行に行けという命令だけで次の行の先頭に行きます。Windowsではこの命令プラス上記のCRが必要になります。詳細:wikipedia
Javaで実践
次にJavaソースコードでの改行の扱いについて考えていきます。
CRはソースコードで\rで表されます。LFはソースコードで\nで表されます。これらの文字は、エスケープ文字と言います。エスケープ文字は、改行や復帰など普通のテキスト入力では表現できないものも表現することが出来ます。
Windows/Linuxの改行をJavaソースコードで記載するとこのようになります。
Windows
\r\n
UNIX
\n
でも、動作させる環境によっていちいちソースコードを変更させるのって面倒ですよね。そんなときにはJavaでシステムに合った改行を取得して使いましょう。Javaで既に準備してくれているんですね、さすがJavaさんです。javaでシステムに合った改行コードを取得する方法は次のとおりです。戻り値で改行コードが返ってきます。
System.getProperty("line.separator");
これは汎用性が高いので、定数として最初に登録してしまう方が楽でしょう。
public static final String LINE_SEPARATOR = System.getProperty("line.separator");
そして、必要に応じて改行しましょう。
System.out.println("Hello World !!" + LINE_SEPARATOR);
以上、JavaでWindows/Linuxの改行を実践してみました。