日本語の文字列を部分抽出
日本語の文字列を部分抽出
RubyのStringには
str[0,10]
というように、文字列を切り取る関数が存在します。
しかし、この関数はマルチバイト文字には対応していないので
日本語フォントを切り取る時には運が悪いと一番最後の文字で文字化けを起こしてしまいます。
というわけで、今回は日本語の文字を文字数で切り取る方法を作りました。
まずは、日本語文字数の数える関数を作ってみます。
def jp_chr_num(strng)
jp_strng_chrs = Array.new
jp_strng_chrs = strng.split(//)jp_chr_num = jp_strng_chrs.length
return jp_chr_num
end
このように、文字列を"//"でsplitすることで
文字を日本語の文字単位で分割することができます。
さらに、これを応用して
指定した開始位置から、指定した文字数分文字を取り出すような関数が下記の関数です。
def cut_strng(strng, cut_num, strt_pnt = 0)
if cut_num == nil || cut_num == 0 then
return ''
else
end_pnt = strt_pnt + cut_num
endif end_pnt >= jp_chr_num(strng) then
end_pnt = jp_chr_num(strng)-1
endif strt_pnt > end_pnt then
return ''
endstrng_chrs = Array.new
strng_chrs = strng.split(//)
cut_strng = ''
strt_pnt.upto(end_pnt) do |x|
cut_strng += strng_chrs[x]
endreturn cut_strng
end
一旦、配列に格納して
後はLoopを使いながら文字を切り出していきます。
これで、マルチバイト文字にも対応して
文字数で文字列の切り出しを行うことが可能です。