(ruby)(tips)(「全角」と「半角」の文字が混ざった文字列を「半角文字列単位」で数えたい)

rubyのtips一覧は→ http://d.hatena.ne.jp/morakana/20141005/1412679155


 Windowsコマンドプロンプトなどの「Shift-JIS環境下」では
単に 文字列に対して bytesize をすれば
半角は1バイト、全角は2バイトとして数えられるので
'aaa漢字bbb'.bytesize()
とすれば都合よく「10」という値になって思った値が得られます

 が、「UTF-8環境下」などではそうはいきません
UTF-8環境下では全角文字は『3バイト』」として数えられますので
単に「'aaa漢字bbb'.bytesize()」とすると値は「12」になります
本来は「10」という値を得たいのでこの方法は使えません

 よっていろんな環境下でも同じ値を得られる方法を考える必要がありますね
まぁ、文字列を走査するのが一番手っ取り早いでしょう
count = 0
'aaa漢字bbb'.chars.each{|c|
	if c.bytesize() == 1 then
		count +=1
	else
		count +=2
	end
}
puts(count)

 頻繁に数えたい場合は
普通にメソッド定義をしてもいいんですが
メソッドの引数の中に文字列を書く形になって見づらくなってしまいますので
Stringクラスを拡張した方が、より見易くスマートなコーディングができます
class String
	def hankaku_length()
		count = 0
		self.chars.each{|c|
			if c.bytesize() == 1 then
				count +=1
			else
				count +=2
			end
		}
		return(count)
	end
end
puts('aaa漢字bbb'.hankaku_length())