【Java】+演算子/concatメソッド/StringBuilderを使って文字列(String)を連結する!
文字列(String)を連結させるには+演算子が思い浮かぶと思います。
しかし、「+」演算子の他にもconcatメソッド、StringBuilderクラスを使うことで文字列の連結を行うことができ、複数の文字列の連結を行いたい場合は「+」演算子よりもStringBuilderクラスを使った方が効率よく処理が行われます。
今回は
・ +演算子
・ concatメソッド
・ StringBuilder
を使って文字列(String)を連結を行います。
目次
+演算子とは
+演算子とは数値型の値をString型の文字列へ変換することができます。
+演算子の書き方
+演算子の構文は下記となります。
1 |
変数 = 文字列1 + 文字列2; |
文字列と文字列2の間に「+」を書くことで文字列1と文字列2を連結させることができます。
数値の場合は、加算された値が出力されます。
toStringの()に数値の変数を指定することで指定した数値をString型へ変換することができます。
concatメソッドとは
concatメソッドは数値型の値をString型の文字列へ変換することができます。
concatメソッドの書き方
>concatメソッドの構文は下記となります。
1 |
変数 = 文字列1.concat(文字列2); |
concatの()に文字列を指定することでconcatの前の文字列と連結させることができます。
その為、変数の値は「文字列1文字列2」というようになります。
StringBuilderとは
StringBuilderは、Stringクラス同様、文字列を扱うクラスになります。
StringBuilderの書き方
StringBuilderの構文は下記となります。
1 |
StringBuilder 変数名 = new StringBuilder(); |
StringBuilder型のインスタンスを作成します。
そうすることで、文字列を作成することができます。
文字列を連結させるサンプルコード
文字列(String)を数値に変換するサンプルコードを紹介します。
+演算子を使用した場合
例
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// 文字列を連結する public class Main { public static void main(String[] args) throws Exception { // +演算子を使用し、文字列を連結 String str1 = "+演算子を使用し、"; String str2 = "文字列を連結します。"; String str3 = str1 + str2; System.out.println(str3); } } |
出力結果
+演算子を使用し、文字列を連結します。
Long型からString型へ変換されました。
concatメソッドを使用した場合
例
1 2 3 4 5 6 7 8 9 10 11 |
public class Main { public static void main(String[] args) throws Exception { // concatメソッドを使用し、文字列を連結 String str4 = "concatメソッドを使用し、"; String str5 = "文字列を連結しました。"; String str6 = str4.concat(str5); System.out.println(str6); } } |
出力結果
concatメソッドを使用し、文字列を連結しました。
concatメソッドによって文字列が連結されています。
StringBuilderを使用した場合
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// 文字列を連結する public class Main { public static void main(String[] args) throws Exception { // StringBuilderを使用し、文字列を連結 StringBuilder sb = new StringBuilder(); String str7 = "StringBuilderを使用し、"; String str8 = "文字列を連結しましょう。"; sb.append(str7).append(str8); System.out.println(sb.toString()); } } |
出力結果
StringBuilderを使用し、文字列を連結しましょう。
StringBuilderクラスのappendメソッドによって文字列が連結されています。
StringBuilderクラス使用した場合、toStringメソッドを呼び出すことで、処理後の文字列を取得することができます。
今回のポイント
文字列を連結するには3つの方法がある
文字列を連結するには+演算子を使用するかconcatメソッドを使用するかStringBuilderクラスを使用する
• 「+」演算子で、連結したい文字列同士を「+」でつなげると文字列を連結できる
• StringBuilderクラスのappendメソッドで文字列を連結するにはパラメータに連結したい文字列を設定する
• 複数の文字列連結を行う場合は、「+」演算子を使用するより、StringBuilderクラスを使った文字列連結の方が効率よく処理を行える
• concatメソッドで文字列を連結するにはappendメソッドと同様にパラメータに連結したい文字列を設定する
補足
値を変更できないインスタンス
「String」クラスは、インスタンス作成後に値を変更することができません。
そのようなクラスを「イミュータブル」(immutable)」なクラスといいます。
「String」クラスは、文字列情報をchar配列の形で持っています。
文字列置換、連結などを行うメソッドはありますが、自身の文字列情報を変更するのではなく、変更後の情報を持った新しい文字列を作成して返すようになっています。
もし、自身の文字列情報を変更できてしまうと、同じインスタンスを参昭している部分に影響が出てしまうため、このように設計されています。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// Stringがイミュータブルなことを確認する public class Main { public static void main(String[] args) throws Exception { String str1 = "abc"; // 小文字を大文字に変換するメソッド String str2 = str1.toUpperCase(); // 内容が変わったかどうかを確認 System.out.println("str1:" + str1); System.out.println("str2:" + str2); } } |
出力結果
str1:abc
str2:ABC
文字列を大文字にするtoUpperCase(ソッドを使用しても、呼出元のインスタンス「str1」の内容は変更されませんが、代わりに、toUpperCaseメソッドの実行結果を格納した新しい文字列を戻します。
その為、サンプルコードでは「str1」の内容はそのままで、「str1」の小文字を大文字に変換した結果が「str2」に 格納されています。
他にも「Integer」クラスや「Long」クラスなどのプリミティブ型のラッパークラスが「イミュータブル」なクラスです。
StringBuilderとStringBufferの違い
文字列の連結を行うクラスとして、「StringBuilder」クラスと「StringBuffer」クラスがあります。
StringBufferクラスは同期化を保証していますが、StringBuilderクラスは同期化を保証しておらず、その分、動作が高速です。
普段は高速な「StringBuilder」クラスを使い、同じインスタンスに複数のスレッドでアクセスする場合は「StringBuffer」クラスを使ようにしてください。
ST
株式会社flyhawkのSTです。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。