GroovyのString(Groovy JDK)にいつの間にか#trメソッドが追加されてた
はじめに
もう、追加したんなら言ってよぉ〜(笑)
ということで、v1.7.3から追加されてたみたいです。
前に自分でtrコマンドを書いたりしてたんですが標準サポートされるなんて嬉しい限り。
ということで早速使ってみた。
ソース (動作確認: Groovy Version: 1.7.5 JVM: 1.6.0_20)
tr.groovy
// すべての 'a' を 'A' に変換 assert 'abcabcabc'.tr('a', 'A') == 'AbcAbcAbc' // a->b, b->a assert 'abcabcabc'.tr('ab', 'ba') == 'bacbacbac' // 範囲もいける assert 'Groovy is so fun!'.tr('a-zA-Z', 'A-Za-z') == 'gROOVY IS SO FUN!' assert '1234567890'.tr('0-9', '零一二三四五六七八九') == '一二三四五六七八九零' // シーザ暗号を定義 def caesarCipher = { int shift, String str -> def table1 = ('a'..'z').toList() def table2 = { def temp = table1 shift.times{ temp = temp.tail() + temp.head() } // シフト回ずらず temp }() str.tr(table1.join(), table2.join()) } // 3文字ずらすシーザ暗号 def caesar3 = caesarCipher.curry(3) assert caesar3('abcxyz') == 'defabc' assert caesar3('fumokmm') == 'ixprnpp'
おわりに
調子に乗ってシーザ暗号まで書いてみました。