文字列を分割する

文字列を分割する方法です。指定の文字や正規表現を使って分割できます。ここでは Ruby で文字列を分割する方法について解説します。

(Last modified: )

文字列を分割する

文字列を指定の文字や正規表現を使って分割する方法です。 String クラスで用意されている split メソッドを使います。

split(sep = $;, limit = 0)

1 番目の引数に指定したパターンに従って文字列を分割し、分割された各部分文字列を要素とする配列を取得します。

パターンには文字列や正規表現を指定できます。

具体的には次のように記述します。

str = "Tokyo,Osaka,Nagoya,Fukuoka"
strAry = str.split(",")

上記の場合にはカンマ(,)で文字列を分割して結果を配列に格納します。配列には ["Tokyo", "Osaka", "Nagoy", "Fukuoka"] のように区切り文字が取り除かれた状態で格納されます。

また 1 文字ずつ分割する場合には空文字を指定してください。

str = "Tokyo"
strAry = str.split("")

上記の場合には 1 文字毎に分割して結果を配列に格納します。配列には["T", "o", "k", "y", "o"]のように 1 文字ずつ分割されて格納されます。

パターンには正規表現パターンを指定することもできます。例えば - または空白文字のどちらかで分割する場合は次のように記述できます。

str = "Border-Left is Red"
strAry = str.split(/[- ]/)

上記の場合にはハイフン(-)または空白文字で分割して結果を配列に格納します。配列には["Border", "Left", "is", "Red"]のように格納されます。

Ruby で正規表現を使う方法については「Ruby正規表現の使い方」を参照されてください。

分割数を制限する

split メソッドの 2 番目の引数を使って分割数を制限する事ができます。省略した場合は 0 が指定されたものとみなされます。

split(sep = $;, limit = 0)

正の整数を指定した場合は指定した数が分割される最大数となります。また負の整数を指定した場合は無制限となります。省略した場合又は 0 を指定した場合も無制限となりますが、この場合は分割された結果の配列の末尾に空文字列が含まれる場合は削除されます。

str = "Tokyo,Osaka,Nagoya,,"
strAry = str.split(",")

上記の場合にはカンマ(,)で文字列を分割して結果を配列に格納しますが配列には ["Tokyo", "Osaka", "Nagoy", "Fukuoka"] となり空文字列は削除されます。

str = "Tokyo,Osaka,Nagoya,,"
strAry = str.split(",", -1)

上記の場合にはカンマ(,)で文字列を分割して結果を配列に格納しますが配列には ["Tokyo", "Osaka", "Nagoy", "Fukuoka","",""] となります。

str = "Tokyo,Osaka,Nagoya,,"
strAry = str.split(",", 2)

上記の場合にはカンマ(,)で文字列を分割して結果を配列に格納しますが最大分割数が「2」に設定されているため配列には ["Tokyo", "Osaka,Nagoya,,"] となります。

サンプルコード

では簡単なサンプルで試してみます。

# encoding: UTF-8

str = "Tokyo,Osaka,Nagoya,,"
puts("対象の文字列:" + str)

puts()

puts("カンマで分割します。分割数は省略します")
strAry = str.split(",")
p(strAry)

puts()

puts("カンマで分割します。最大分割数は -1 です")
strAry = str.split(",", -1)
p(strAry)

puts()

puts("カンマで分割します。最大分割数は 2 です")
strAry = str.split(",", 2)
p(strAry)

実行結果は次のようになります。

文字列を分割する

-- --

Ruby で文字列を分割する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。