
rubyで数値を表す文字列だったら数値型、それ以外は文字列のままにするメソッド
Rubyで文字列と数値(数値を表す文字列)が混在しているデータを、本来数値だった物は数値型にし、文字列はそのままにする方法を調べたのでメモ。
なんかそういう便利なメソッドがあるのかなー?と思ったら無いみたい。なので、これもStringクラスを拡張してやってみる。
class String
def str_int?
Integer(self)
rescue
self
end
end
p "123".str_int? #=> 123
p "1d".str_int? #=> "1d"
p "_123".str_int? #=> "_123"
p "123_".str_int? #=> "123_"
p "0".str_int? #=> 0
p ".0".str_int? #=> ".0"
p "1.0".str_int? #=> "1.0"
p "0.0".str_int? #=> "0.0"
foo = 0
p foo.str_int? #=> undefined method `str_int?' for 0:Fixnum (NoMethodError)
当然だけど最初から数値のデータはStringクラスじゃないからundefined method。
で、1.0や0.0といった小数を含む数値データは、Integer(str)だと文字列に判別されるみたい。もしも小数を含む数値データも数値型にしたい場合はFloat(str)を使えばいいみたい。
class String
def str_int?
Float(self)
rescue
self
end
end
p "123".str_int? #=> 123.0
p "1d".str_int? #=> "1d"
p "_123".str_int? #=> "_123"
p "123_".str_int? #=> "123_"
p "0".str_int? #=> 0.0
p ".0".str_int? #=> 0.0
p "1.0".str_int? #=> 1.0
p "0.0".str_int? #=> 0.0
今回の自分の場合は整数しか使う予定がないので、Integer(str)で良さそうだ。