読者です 読者をやめる 読者になる 読者になる

No Programming, No Life

新しいNPNLです。http://d.hatena.ne.jp/fumokmm/ から引っ越してきました。

Re[3]:ファイルの添え番号の桁を3桁に揃えるGroovyスクリプト

Re:ファイルの添え番号の桁を3桁に揃えるGroovyスクリプト - No Programming, No Life
にて、私の書いたスクリプトを
ゲンゾウ用ポストイット: Re:Re:ファイルの添え番号の桁を3桁に揃えるGroovyスクリプト
にてゲンゾウさんがブラッシュアップしてくださっておりました。*1


対象箇所はテキストに含まれる数値の最大桁数を求める部分。

私の書いたもの

def maxDigit = list.collect{ name ->
      (name =~ /(\d+)/).collect{ it }
   }.flatten()*.toInteger().max().toString().size()

私の書いたものはflatten()やらtoInteger()やら何やらごちょごちょやってて見苦しいですが…

ゲンゾウさんの書いたもの

def maxDigit = list*.replaceAll(/^[^\d]*|[^\d]*$/, "")*.size().max()

なるほど!数値でない部分をreplaceAllで一気に吹き飛ばすわけですね。
確かにこれの方がすっきりしていていい感じです。勉強になりました。*2

番外編

番外編として、java.text.MessageFormatを使ってこの処理を行ってみました。

format = new java.text.MessageFormat('{0}[{1}]{2}')
def maxDigit = list.collect{ format.parse(it)[1] }*.size().max()

文字列抽出処理は奥深いですね。

*1:ありがとうございます

*2:collectする時にリスト自身のメソッドで片が付く場合は、*.演算子を使ったほうがスマートな記述になるんですね。