日本語の文字列を部分抽出

INDEX PAGE

日本語の文字列を部分抽出


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
 end

 if end_pnt >= jp_chr_num(strng) then
  end_pnt = jp_chr_num(strng)-1
 end

 if strt_pnt > end_pnt then
  return ''
 end

 strng_chrs = Array.new

 strng_chrs = strng.split(//)

 cut_strng = ''

 strt_pnt.upto(end_pnt) do |x|
  cut_strng += strng_chrs[x]
 end

 return cut_strng

end

一旦、配列に格納して
後はLoopを使いながら文字を切り出していきます。
これで、マルチバイト文字にも対応して
文字数で文字列の切り出しを行うことが可能です。


INDEX PAGE