Rubyで文字列を結合する場合、+演算子や、<<、concatメソッドを使う方法があります。
また、+演算子やconcatメソッドは、配列の結合にも使うことができます。
この記事ではconcatメソッドなどの、Rubyで文字列・配列を結合する便利なメソッドに追加解説していきます。
文字列を結合する
まずは、文字列を結合する方法を見ていきましょう。
前述のように、Rubyで文字列を結合する方法には、+演算子、<<およびconcatメソッドの3つの方法があります。
最初に注意しなければいけなのが、+演算子は非破壊メソッドなのに対し、<<およびconcatメソッドは破壊的なメソッドであることを覚えておきましょう。
非破壊メソッドである+演算子は、結合する変数の値は変更されず、新しいインスタンスの文字列が生成されます。破壊的メソッドである、<<およびconcatメソッドは、元の変数の値が結合した文字列に変わるため、用途に合わせて使い分けましょう。
+演算子の使い方
まずは、非破壊メソッドである+演算子を使って文字列を結合する方法を見ていきましょう。
以下のサンプルコードをご覧ください。
## 結合する文字列の変数を2つ用意
s1 = "ようこそ"
s2 = "Rubyの世界へ!!"
## 「+」演算子で文字列を結合し、結果をコンソールに表示
p s1 + s2
p s1
p s2
【実行結果】
-----------------------------------
"ようこそRubyの世界へ!!"
"ようこそ"
"Rubyの世界へ!!"
実行結果の1行目のとおり、+演算子の左右に指定した文字列が、結合されているのが分かります。
また、非破壊メソッドである+は、元の変数のs1、s2の値を変更しないことから、実行結果の2〜3行目には、元の変数の値が出力されています。
ちなみに、上の例では文字列の変数同士を+演算子で結合していましたが、文字列のリテラル同士を指定しても、問題なく文字列の結合は行えます。
## 「+」演算子で文字列を結合し、結果をコンソールに表示
p "ようこそ" + "Rubyの世界へ!!"
【実行結果】
-----------------------------------
"ようこそRubyの世界へ!!"
String#concatの使い方
次は、concatメソッドの使い方を解説します。
cancatメソッドは破壊的メソッドであるため、メソッドを呼び出した変数は、文字列結合した内容に変数の値が書き換えられます。
それでは、次のサンプルコードをご覧ください。
## 結合する2つの文字列変数を宣言
s1 = "ようこそ"
s2 = "Rubyの世界へ!!"
## concatでs1とs2の文字列を結合し、s1の変数の中身を(破壊的に)変更
s1.concat(s2)
## 文字列結合した結果が格納された変数s1を表示
p s1
【実行結果】
-----------------------------------
"ようこそRubyの世界へ!!"
このように、concatメソッドは文字列結合した結果を、メソッドを呼び出した変数に反映するため、s1の変数が破壊的に書き換わっているのが分かります。
引数を複数指定してまとめて結合する
cancatメソッドの引数を複数指定すると、指定した引数をまとめて文字列が結合できます。
## 結合する文字列の変数を4つ用意
s1 = "ようこそ"
s2 = "Rubyの世界へ!!"
s3 = "最初は基本から"
s4 = "身につけよう"
## cancatメソッドで、s1の変数にs2,s3,s4の文字列を結合
s1.concat(s2, s3, s4)
p s1
【実行結果】
-----------------------------------
"ようこそRubyの世界へ!!最初は基本から身につけよう"
s1の変数に対し、引数で渡したs2, s3, s4の変数が文字列結合されていることが分かります。
String#<< の使い方
str1 << str2ように、<<を使って文字列を結合することもできます。
<<も破壊的メソッドであるため、メソッドを呼び出した変数は、文字列結合をした内容に変数の値が書き換えられます。
<<を使って文字列結合するサンプルコードを見てみましょう。
## 結合する2つの文字列変数を宣言
s1 = "ようこそ"
s2 = "Rubyの世界へ!!"
## << でs1とs2の文字列を結合し、s1の変数の中身を(破壊的に)変更
s1 << s2
## 文字列結合した結果が格納された変数s1を表示
p s1
【実行結果】
-----------------------------------
"ようこそRubyの世界へ!!"
cancatメソッド同様、s1 << s2の行で文字列結合された結果が、s1の変数に格納されていることが分かります。
複数の文字列をまとめて結合する
<<を1行に複数指定して、まとめて複数の文字列を結合できます。
次のサンプルコードをご覧ください。
## 結合する文字列の変数を4つ用意
s1 = "ようこそ"
s2 = "Rubyの世界へ!!"
s3 = "最初は基本から"
s4 = "身につけよう"
## cancatメソッドで、s1の変数にs2,s3,s4の文字列を結合
s1 << s2 << s3 << s4
p s1
p s2
p s3
p s4
【実行結果】
-----------------------------------
"ようこそRubyの世界へ!!最初は基本から身につけよう"
"Rubyの世界へ!!"
"最初は基本から"
"身につけよう"
上の実行結果のように、<<で連結された変数を結合した結果が、s1の変数に格納されています。
配列を結合する
+演算子、concatメソッドは、配列の結合にも用いることができます。
構文もまったく同じで、前述した文字列の結合を理解できれば、配列の結合も問題なく理解できるでしょう。
では実際に、それぞれの方法で配列を結合するサンプルコードを確認していきましょう。
+演算子で配列を結合
まずは、+演算子のサンプルコードです。文字列の結合と同様に、結合する2つの配列を+演算しの両サイドに指定して結合します。
## 結合する2つの配列を用意
array1 = [1, 2, 3]
array2 = [4, 5]
## +演算しでで、array1とarray2を結合
p array1 + array2
## 変数の中身が書き換わっていないことを確認するため、
## 配列変数の内容をコンソールに出力
p array1
p array2
【実行結果】
-----------------------------------
[1, 2, 3, 4, 5]
[1, 2, 3]
[4, 5]
Array#concatで配列を結合
次に、cancatメソッドで配列を結合するサンプルコードです。cancatメソッドは破壊的メソッドのため、元の変数の内容は書き換わります。
## 結合する2つの配列を用意
array1 = [1, 2, 3]
array2 = [4, 5]
## concatメソッド、array1とarray2を結合
array1.concat(array2)
## 結合した結果が格納された変数array1を表示
p array1
【実行結果】
-----------------------------------
[1, 2, 3, 4, 5]
<< は配列の結合では使えない
ここまで流れで、<<を使っても配列同士を結合できると思った方もいるかもしれませんが、配列での<<メソッドは、要素を1件追加するメソッドのため、配列同士の結合には<<を用いることはできません。
実際に試してみましょう。
## 結合する2つの配列を用意
array1 = [1, 2, 3]
array2 = [4, 5]
## << で、array1とarray2を結合
array1 << array2
## 結合した結果が格納された変数array1を表示
p array1
【実行結果】
-----------------------------------
[1, 2, 3, [4, 5]]
このように、<<は配列の末尾に要素を1件追加するメソッドのため、array2の内容が、配列の1要素としてarray1の末尾に追加されています。
さいごに
Rubyでconcatメソッドなどを使用して、文字列や配列を結合する方法を解説してきました。
文字列の結合処理は、Rubyに限らずプログラミング全般でよく使うため、基本として是非覚えておきましょう。
【関連記事】
▶【Ruby入門】splitメソッドの使い方の応用例
String#<<は変数の中身が書き換えられる破壊的メソッドですが、<<を使用した場合、変数の値が書き換わるのは、<<で連結された一番左の変数のみで、それ以外の変数は影響を受けません。