067:文字列を最大n桁に切り詰める

お題

文字列を最大n桁に切り詰める
Ruby レシピだと、「全角文字幅=半角文字×2と仮定して」とあったので、同じ条件で。

コード

if (GroovySystem.getVersion() < "2.0") {
    println "Groovy 2.0 以上が必要"
    System.exit(1)
}

def takeNcols(str, n){
    result = ""
    str.takeWhile {
         if ( (result + it).getBytes("Shift-JIS").size() <= n ) {
            result += it
        }
    }
    return result


}

assert takeNcols("あいうえおabcdeかきくけこfghij",10) == "あいうえお"

Shift_JISで表現した日本語文字列はバイト数と幅が一致するので、一度Shift_JISに変換して」
とあったので、Shift_JISに変換してみた。


takeWhile()の動作
http://www.slideshare.net/uehaj/new-feature-of-groovy20-gworkshop


わざわざバージョンチェックをしてるのは自分の環境が1.8.6だったのに、2.0と思い込んで
はまったからだよ・・・

添削歓迎

ここ間違ってるよ
こうした方がGroovyらしくないか?
などなど
方法は、コメント、トラックバックはてブTwitter @orange_clover宛 で、お願いします。

実行環境




Groovyの詳細についてはJavadocと以下の書籍を参考にしている。




関谷 和愛、上原 潤二、須江 信洋、中野 靖治
価格: ¥ 3,360
価格は記載時点のものです。購入前にAmazonでご確認ください。

「プログラミングGROOVY」正誤表




問題自体は第2版のもの。
自分で考えるために他言語の例をGroovyで置き換えてる。
が、自分だけで書いてるとGroovyっぽくならいないのが玉にキズ。




青木 峰郎、後藤 裕蔵、高橋 征義、まつもと ゆきひろ

価格: ¥ 2,940
価格は記載時点のものです。購入前にAmazonでご確認ください。