LoginSignup
6
5

More than 5 years have passed since last update.

Rubyで文字列を分割してN番目をnil安全に取得する

Last updated at Posted at 2016-03-01

例えば、岸辺 露伴という名前の文字列を渡されて、これを姓名に分割するとします。

この文字列は ルール として、姓名の間に全角スペースが入るものとします。

何も考えずにやると、

name = '岸辺 露伴'
last, first = name.split(' ')[0], name.split(' ')[1]
=> ["岸辺", "露伴"]

とかやっちゃいます。
でもこのルールが守られていない汚れデータが入ってくると、

name = 'ファニー・バレンタイン'
last, first = name.split(' ')[0], name.split(' ')[1]
=> ["ファニー・バレンタイン", nil]

nilっちゃったよ。

まぁ汚れたデータのほうが悪いんですが、こういうパターンも安全に倒したいなと思ったので、以下のようにしました。

class String
    def split_get(pattern, index, limit = -1)
        self.split(pattern, limit)[index].presence || ''
    end
end

presenceを使わないなら

class String
    def split_get(pattern, index, limit = -1)
        str = self.split(pattern, limit)[index]
        str.nil? ? '' : str
    end
end

これなら

name = 'ファニー・バレンタイン'
last, first = name.split_get(' ', 0), name.split_get(' ', 1)
=> ["ファニー・バレンタイン", ""]

nilじゃなく空文字で帰ってくるので、NoMethodErrorとかならない。

瑣末なことだけど、こういうオプションもあったほうが便利だよね、ということで。。

追記

コメントでArray#fetchを教えてもらいました。

やっぱり車輪は作る前から存在しているもんだね

6
5
7

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5