Comment detail

LL Golf Hole 2 - 文字列に含まれる単語の最初の文字を大文字にする (Nested Flatten)

リテラルを変換するだけなら{}の中だけで良かったのだけれど… Stringにメソッドを追加する形にしてみました。

このコードを実行するとStringにcapitalizeメソッドが追加され、

>>> "LL future".capitalize()
"LL Future"
>>> "LL day and night".capitalize()
"LL Day And Night"

あるいは、

>>> ["LL future", LL day and night].capitalize()
["LL Future", "LL Day And Night"]

のように動作します。タブとかも大丈夫のはず…

1
2
3
4
5
String.metaClass.capitalize = {
    return delegate.replaceAll(
            /(¥s)(¥w)/,
            {all, s, w -> s + w.toUpperCase()})
}

行頭が大文字じゃなくても大丈夫な様にしました。

あとちょこっとだけ短くしてみました。メソッド名、ほんとはcapitalizeWordsとかにすべきなのかなぁ?

1
String.metaClass.capitalize = {delegate.replaceAll(/(^|¥s)(¥w)/, {all, s, w -> s + w.toUpperCase()})}

stdin → stdout

1
print"$System.in".replaceAll(/\b./){it.toUpperCase()}

Index

Feed

Other

Link

Pathtraq

loading...