😎

Ruby の String#split の第二引数について

2024/02/15に公開

Ruby の String#split は『任意の文字を区切って配列に変換する』という処理になります。

str = "homu,mami,mado,saya,an"

# , 区切りで分割して配列に変換する
pp str.split(",")
# => ["homu", "mami", "mado", "saya", "an"]

第二引数で分割する配列のサイズを指定できる

String#split では第二引数で『分割するときの配列のサイズ』を指定する事ができます。

str = "homu,mami,mado,saya,an"

# 配列のサイズが 2 になるように調整して分割する
pp str.split(",", 2)
# => ["homu", "mami,mado,saya,an"]

# 配列のサイズが 4 になるように調整して分割する
pp str.split(",", 4)
# => ["homu", "mami", "mado", "saya,an"]

第二引数に 0-1 を渡した場合の違い

第二引数に 0-1 を渡した場合には『分割するサイズの制限』はなくなります。

str = "homu,mami,mado,saya,an"

pp str.split(",", 0)
# => ["homu", "mami", "mado", "saya", "an"]

pp str.split(",", -1)
# => ["homu", "mami", "mado", "saya", "an"]

ただし、 0 を渡した場合には『配列末尾の空文字列を取り除く』という作用があります。

str = "homu,mami,mado,"

# , が終端の場合末尾に空となる文字列がある
pp str.split(",", -1)
# => ["homu", "mami", "mado", ""]

# 0 を渡すとこの空の文字列が取り除かれる
pp str.split(",", 0)
# => ["homu", "mami", "mado"]

# デフォルトでは 0 を渡したときと同じ挙動になる
pp str.split(",")
# => ["homu", "mami", "mado"]

こんな感じで意図的に空の文字列を残したい場合は -1 を渡す必要があります。

参照

GitHubで編集を提案

Discussion