文字列を最大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) #=> "あい"
前者よりもこっちのほうがずっと高速だが、この正規表現の仕様が将来も保証されるかどうかは分からない。