📝

Ruby splitメソッド基本の使い方

2023/06/24に公開

今日は文字列操作のメソッド、splitメソッドの使い方についてまとめます。
例えば、標準入力で「プログラミング Ruby」と入力された文字列を、プログラム上で「プログラミング」「Ruby」のように別々の文字列として扱いたい時などに活用できるメソッドです。

基本構文

splitメソッドを使うと、文字列を任意の条件で分割して配列に格納してくれます。

"文字列".split(区切り文字, 分割数)

# 例:コンマで区切られた文字列を配列に格納する
irb(main):013:0> "apple,banana,orange".split(',')
=> ["apple", "banana", "orange"]

# 分割数を指定した場合
irb(main):014:0> "apple,banana,orange".split(',', 2)
=> ["apple", "banana,orange"]  # 2分割に制限され要素は2つになる



区切り文字には文字列以外にも正規表現や空白、nilを指定することができます。

区切り文字に正規表現を使う

区切り文字の指定に正規表現を使うと、文字列は正規表現に一致する部分で分割されます。
区切りたい文字が2種類以上ある時にはこちらを使うのが良さそう。

# 例:区切り文字にコンマを指定(正規表現ver)
irb(main):015:0> "10:30,15:10".split(/,/)
=> ["10:30", "15:10"]

# 区切り文字に「,」と「:」を正規表現で指定
irb(main):016:0> "10:30,15:10".split(/,|:/)
=> ["10", "30", "15", "10"]

区切り文字に空白文字、nilを使う

1バイトの空白文字

区切り文字に1バイトの空白文字(' ')を指定すると、「文字列の先頭と末尾の空白文字」を除いてくれ、その上で「空白文字列」で分割します。

irb(main):018:0> " abc def  g ".split(' ')
=> ["abc", "def", "g"]

また、除外・分割対象になる「空白文字」には半角スペースだけではなく、改行(\n)、タブ(\t)も対象となります。

irb(main):019:0> "\nabc\ndef\n\ng\n".split(' ')
=> ["abc", "def", "g"]

irb(main):020:0> "\tabc\tdef\t\tg\t".split(' ')
=> ["abc", "def", "g"]

nil

区切り文字にnilを指定すると、(' ')と同じ結果になります。

irb(main):021:0> " abc def  g ".split(nil)
=> ["abc", "def", "g"]
irb(main):022:0> "\nabc\ndef\n\ng\n".split(nil)
=> ["abc", "def", "g"]
irb(main):023:0> "\tabc\tdef\t\tg\t".split(nil)
=> ["abc", "def", "g"]

また、splitメソッドの引数を省略した場合も返ってくる結果は、(' ')やnilを指定した時と同じになります。

irb(main):024:0> " abc def  g ".split
=> ["abc", "def", "g"]

splitメソッドを他のメソッドと組み合わせて使用する

splitメソッドの応用例として、eachメソッドを使って空白で区切られた文字をひとつずつ出力してみたいと思います。

s = "Japan America France"
array = s.split
array.each do |a|
  puts a
end

# 出力結果
Japan
America
France

参考

https://docs.ruby-lang.org/ja/latest/method/String/i/split.html

https://pikawaka.com/ruby/split#splitメソッドの応用的な使い方

Discussion