Groovyの#stripMarginをもうちょっと便利にしてみた
はじめに
v1.7.3からString#stripMarginが追加されたので、先頭にパイプ('|')など*1を指定することで揃えることができるようになりました。
'''|aaa |bbb |ccc'''.stripMargin()
みたいな感じで書くと
aaa bbb ccc
といった感じになります。
まぁ、これはこれで便利なんですが、私としてはちょっと使い勝手が悪いなぁ…と思っていた次第です。
これができると何が嬉しいか
- 複数行文字列のうち、空行は無視して欲しい。*2
- 先頭は空白以外どんな文字があってもいいから指定した文字を先頭として扱いたい。
- あとは先頭文字としては自由に選びたいよね(デフォルトは'|'で良し)
てな感じで。
ソース (動作確認: Groovy Version: 1.7.5 JVM: 1.6.0_20)
stringStrip.groovy
// Stringを拡張 String.metaClass.strip = { first -> def reg = (first ?: '|').with{ [/^.*\${it}.*$/, /^.*\${it}/] } delegate.readLines() .grep(~reg[0])*.replaceFirst(reg[1], '') .join(System.properties['line.separator']) } // 検査用文字列 def str = ''' | >.a | > .b | > .c ''' // デフォルトの '|' でストリップしてみる assert str.strip() == '''\ >.a > .b > .c''' // お次は '>' でストリップ assert str.strip('>') == '''\ .a .b .c''' // 最後は '.' だ assert str.strip('.') == '''\ a b c'''
おわりに
ということで、できました。