Groovyで改行コードを扱う方法

マルチプラットフォームを扱うとなるとやっかいなモノの1つが改行コード。

プラットフォーム 文字コード 16進数表示
Windows \r\n 0x0D,0x0A
Unix(SolarisLinux) \n 0x0A
Mac OS (バージョン9まで) \r 0x0D


Javaであれば、以下でプラットフォームごとの改行コードを取得することができる

System.getProperty("line.separator") 

Groovyでは、そのシンタックスシュガーで配列でも取得することができる。

System.properties['line.separator']


また、Groovyではその他にも以下の取得メソッドがある。

org.codehaus.groovy.tools.Utilities.eol()


Groovy JDKのStringクラスには、取得するメソッドとは別に、改行コードを変換するメソッドも存在する。

メソッド名 説明
normalize() 改行コードを\nに変換する
denormalize() LF、 CR/LF、CRの改行コードを各プラットフォームの改行コードに変換する


記述形式としては、\nとして書いておいて、最後に、denormalize()で各プラットフォームの
改行文字に変換するということもできる。



ソース

lineSeparator = System.properties['line.separator']
eol = org.codehaus.groovy.tools.Utilities.eol()

windowsText = '1行目\r\n2行目\r\n'
unixText = '1行目\n2行目\n'

/* プラットフォームにあったテキストの方がTrueになる */
println "1行目${lineSeparator}2行目${lineSeparator}" == windowsText
println "1行目${lineSeparator}2行目${lineSeparator}" == unixText

/* プラットフォームにあったテキストの方がTrueになる */
println "1行目${eol}2行目${eol}" == windowsText
println "1行目${eol}2行目${eol}" == unixText

/* 両方Trueになる */
println '1行目\n2行目\n' == windowsText.normalize()
println '1行目\n2行目\n' == unixText.normalize()

/* 各プラットフォームの改行コードに変換されるので、
 * Windowsのときだけ、Trueになる
 */
println '1行目\r\n2行目\r\n' == windowsText.denormalize()
println '1行目\r\n2行目\r\n' == unixText.denormalize()

/* 各プラットフォームの改行コードに変換されるので、
 * Unixのときだけ、Trueになる
 */
println '1行目\n2行目\n' == windowsText.denormalize()
println '1行目\n2行目\n' == unixText.denormalize()

Windows

結果
[D:\workspace\groovy_SandBox]groovy LineSeparator.groovy
true
false
true
false
true
true
true
true
false
false
環境

Linux

結果
[oc@centos5 Groovy]$ groovy LineSeparator.groovy
false
true
false
true
true
true
false
false
true
true
環境
  • CentOS 5.2 (Final) 2.6.18-92.1.6.el5
  • Groovy Version: 1.7.5 JVM: 1.6.0_11

気になるモノ




ベッドやソファに簡単に差し込むだけで収納ラックになる新しい発想のラックが登場!座ったまま、寝たまま、リモコンがすぐ見つかる!

あなろ(インテリア雑貨)

¥ 980 (税込、送料別)

価格は記載時点のものです。購入前にご確認ください。