文字列の先頭から指定した文字数文の文字列を返す
railsで長い文字列を扱った時に、先頭から指定した文字列のみを表示したい。
始めStringのsliceをつかえばいいのかと思ったが、これは文字列をバイト列として扱っていて、引数で指定した数値は何バイト目から何バイト目をきり取るという処理であるから、マルチバイト文字を分解したいときには使えない。
長い文字列を一定の長さで分割したいを見るとsplite(//)で文字列を文字単位に分割していたので、この方法を頂いて、やってみた。
def slice_by_length(str, str_length) c = 0 str.split(//).inject(""){ |result, char| result += char if c < str_length c += 1 result } end
でもこれだと無駄なループが生まれる。
いい方法は無い物かとリファレンスマニュアルを見てたらわかりやすいのがあった。
それで、、
def slice_by_length(str, str_length) str.split(//).first(str_length).inject("") do |result, char| result += char end end
となった。
これでおkかな。
もっといいやり方があったら教えて下さい。
僕はRubyは1.8系を使ってるんですが、1.9系ではバイト単位ではなく文字単位で文字を認識できるようになってるらしいと初めてのRubyにちらっと書いてある。
使ってみようかな、1.9