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と以下の書籍を参考にしている。
問題自体は第2版のもの。
自分で考えるために他言語の例をGroovyで置き換えてる。
が、自分だけで書いてるとGroovyっぽくならいないのが玉にキズ。