文字列の連結(+演算子)
「+」演算子は算術演算子における加算や単項演算子としても使われていますが、文字列に対して使用すると文字列と文字列などを連結する演算子として利用することもできます。ここでは + 演算子を使った文字列の連結について解説します。
(Last modified: )
?演算子を使った文字列の連結
「+」演算子は算術演算子や単項演算子としても使われていますが文字列に対して使用すると文字列と文字列を連結する演算子となります。次のサンプルを見てください。
String a = "東京都"; String b = "港区"; String c = a + b; System.out.println(c); // 東京都港区
+ 演算子の左辺と右辺の文字列の値を連結した新しい文字列が変数に代入されました。
また + 演算子の左辺と右辺がともに数値だった場合には加算が行われますが、どちらかが文字列でどちらかが数値だった場合には、数値を文字列に変換した上で文字列の連結が行われます。次のサンプルをみてください。
String cate = "本棚"; int code = 504; String name = cate + code; System.out.println(name); // 本棚504
+ 演算子の左辺と右辺がそれぞれ文字列と数値のため、数値を文字列に変換した上で左辺と右辺の文字列の値を連結した新しい文字列が変数に代入されました。
文字列連結の順序
+ 演算子の結合規則は左ですので、式の中に複数の + 演算子が含まれる場合は左から順に連結が行われます。次のサンプルをみてください。
String s = 45 + 18 + "point"; System.out.println(s); // 63point
複数の + 演算子が使用されているので左から順番に結合が行われます。最初の 45 + 18 はどちらも数値のため加算が行われて 63 となります。その次の 63 + "point" は左辺が数値で右辺が文字列のため、数値が文字列に変換された上で連結されます。結果として変数 s には "63point" が代入されます。
もう一つサンプルを見てください。
String s = "point" + 45 + 18; System.out.println(s); // point4518
複数の + 演算子が使用されているので左から順番に結合が行われます。最初の "point" + 45 は左辺が文字列で右辺が数値のため、数値が文字列に変換された上で連結され "point45" となります。その次の "pont45" + 18 も左辺が文字列で右辺が数値のため、数値が文字列に変換された上で連結されます。結果として変数 s には "point45" が代入されます。
このように複数の + 演算子を使用する場合で、文字列と数値が混在する場合には記述された順番が重要となりますのでご注意ください。必要であれば括弧を使用して演算が行われる順序を変更してください。
String s = "point" + (45 + 18); System.out.println(s); // point63
それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample14-1.java という名前で保存します。
class JSample14_1{ public static void main(String[] args){ System.out.println(45 + 18 + "point"); System.out.println("point" + 45 + 18); System.out.println("point" + (45 + 18)); } }
コンパイルを行います。
javac -encoding UTF-8 JSample14_1.java
その後で、次のように実行してください。
java JSample14_1
+ 演算子を使って文字列と数値を連結する場合で文字列と数値の順番を変えて試してみました。
StringBuilderを使った文字列の連結
複数の文字列を連結する場合、 + 演算子を使用する以外に StringBuilder クラスのインスタンスを使用する方法もあります。詳しい解説は別のページにて行いますので、ここでは文字列の連結を行う他の方法について参考程度に見ておいてください。
次のサンプルを見てください。
StringBuilder sb = new StringBuilder(); sb.append("XT"); sb.append(3140); sb.append("-Y2"); String name = sb.toString(); // XT3140-Y2
StringBuilder クラスのインスタンスを作成したあと、 append メソッドを使って連結する文字列や数値などの値を追加していきます。最後に toStirng メソッドを使って文字列に変換し変数 name に代入しています。
同じ処理を + 演算子を使って記述すると次のようになります。
String name = "XT" + 3140 + "-Y2"; // XT3140-Y2
+ 演算子の方が簡潔に記述できていて優れているように見えますが、例えば繰り返し処理の中で文字列を追加していく場合などは StringBuilder を使用した方がパフォーマンスがよくなる場合があります。プログラミングの学習を始めたばかりであれば、特に記されずに分かりやすい方を使われるのがいいかと思います。
-- --
+ 演算子を使った文字列の連結について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。