文字列を最大nバイトに切り詰める

公開日: : 最終更新日:2014/01/25 Ruby

記事内に広告を含む場合があります。記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。

ようやく欲しい処理を手に入れた。

文字の配列に分割して切り詰める


def take_nbytes1(str, n)
buf = ""
str.split(//).each do |ch|
break if buf.size + ch.size > n
buf << ch
end
buf
end

p take_nbytes1("あいうえお", 4) #=> "あ"
p take_nbytes1("あいうえお", 5) #=> "あ"
p take_nbytes1("あいうえお", 6) #=> "あい"

正規表現を利用して切り詰める

Rubyの正規表現の「.」は中途半端なマルチバイト文字にマッチしない、という特性を利用。


def take_nbytes2(str, n)
str[0, n].slice(/\A.{0,}/m)
end

p take_nbytes2("あいうえお", 4) #=> "あ"
p take_nbytes2("あいうえお", 5) #=> "あ"
p take_nbytes2("あいうえお", 6) #=> "あい"

前者よりもこっちのほうがずっと高速だが、この正規表現の仕様が将来も保証されるかどうかは分からない。

関連記事

サンフランシスコのピア39にあるチャウダーズでクラムチャウダーを食す!

lolipop アップルの開発者向けイベント「WWDC2014」

ミスドのカルピスドーナツとカルピスポンデリングを食べてみた!

ミスドで期間限定のカルピスコラボ商品「カルピスドーナツ」と「カルピ

十三カレー計画で牛すじカレーネギのせを食す!(大阪・十三)

「iPhoneアプリ開発キャンプ@大阪」のランチで、十三カレー計画

大阪・難波の加寿屋 法善寺でかすうどんを食す。ランチタイムはおにぎり2個まで無料!

大阪・難波の加寿屋 法善寺 (かすうどん KASUYA)で、かす

ライブドアブログで運営していた「あきお商店」を「卵は世界である」に改名しました

少し前からライブドアブログで「あきお商店」というブログをやって

→もっと見る

PAGE TOP ↑