文字列を分割する

広告

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

split([sep[, limit]])

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文字ずつ分割されて格納されます。

分割数を制限する

「split」メソッドの2番目の引数を使って分割数を制限する事が出来ます。

split([sep[, limit]])

「limit」に正の整数を指定した場合、分割される最大数となります。また負の整数を指定した場合は無制限となります。省略した場合又は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,,"]となります。

サンプルプログラム

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

LibraryString12.rb

#! ruby -Ks

str = "Tokyo,Osaka,Nagoya,,"

print("対象の文字列:", str, "¥n")
print("カンマで分割します¥n")

strAry = str.split(",")
strAry.each do |youso|
  print("[", youso, "]¥n")
end

print("カンマで分割します¥n")

strAry = str.split(",", -1)

strAry.each do |youso|
  print("[", youso, "]¥n")
end

print("カンマで分割します。最大分割数は2です¥n")

strAry = str.split(",", 2)

strAry.each do |youso|
  print("[", youso, "]¥n")
end

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

文字列を分割する

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)