LoginSignup
2
0

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-08-05

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

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

splitの仕様

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

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

実際の解剖コード

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

ruby.rb
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を追加して、最後の項目(茨城)を対象に別処理を追加しました。

2
0
2

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
2
0