Ruby
RubyOnRails

splitメソッドを解剖してみる【Ruby】

splitメソッドを解剖してみる

たまにこのメソッドはどのような中身になっているのか。。。となることがありまして、今回はsplitメソッドを解剖してみます。つまり、splitと同じ処理をあえてsplitを使わずやってみます。

splitの仕様

splitメソッドは、文字列を特定の区切り文字で分割し、配列化するメソッドです。

strs = "栃木;群馬;茨城"
splitted_strs = strs.split(";")
puts splitted_strs #=> ["栃木", "群馬", "茨城"]

実際の解剖コード

こんな感じで書いてみました。

class Tokenizer

  def initialize(strs)
    @strs = strs
  end

  def tokenize(delim)
     one_chara_items = []
     stocked_items = []
     @strs.each_char.with_index do |ch, num|
        if ch == delim
          stocked_items.push(one_chara_items.join)
          one_chara_items = []
        elsif num == @strs.length - 1
          one_chara_items.push(ch)
          stocked_items.push(one_chara_items.join)
          one_chara_items = []
        else
          one_chara_items.push(ch)
        end
     end
     @stocked_items = stocked_items
  end

  def tokens
    @stocked_items
  end


end

tokenizer = Tokenizer.new("栃木;群馬;茨城")
tokenizer.tokenize(";")
puts tokenizer.tokens #=>  ["栃木", "群馬", "茨城"]

一番困ったのは、delimが文字の後(栃木、群馬の後の;)に来るものでないと、最初のif文(ch == delim)は効果を発揮しないということです。つまり、茨城の後には;が来ていないので、このif文だと、茨城が配列に入りません。
なので、elsifを追加して、最後の項目(茨城)を対象に別処理を追加しました。