【Java入門】2つの文字列を連結して新しい文字列を生成する3つの方法
Javaにおける文字列(String)は、文字の並びを格納するためのものであり、オブジェクトとして扱われます。java.langパッケージに含まれるStringクラスがこの文字列を表現しています。
文字列の生成方法は主に2つあります。1つは他のオブジェクトと同様にnewキーワードを使用する方法、もう1つはプリミティブ型のようにリテラルを直接代入する方法です。
String stringObject = new String("Hello how are you");
String stringLiteral = "Welcome to Tutorialspoint";
なお、JavaのStringオブジェクトには不変(イミュータブル)という重要な特徴があります。一度生成した文字列の内容を後から変更することはできず、何らかの操作を行うと常に新しい文字列オブジェクトが生成される仕組みになっています。
文字列を連結する3つの方法
Javaで2つの文字列をつなげて新しい文字列を作るには、主に以下の3つの方法があります。
1. 「+」演算子を使う
Javaには文字列連結用の「+」演算子が用意されており、これを使えば2つの文字列リテラルや変数を直感的につなげることができます。最もシンプルで読みやすい方法です。
サンプルコード
import java.util.Scanner;
public class StringExample {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter the first string: ");
String str1 = sc.next();
System.out.println("Enter the second string: ");
String str2 = sc.next();
// 2つの文字列を連結
String result = str1 + str2;
System.out.println(result);
}
}
実行結果
Enter the first string: Krishna Enter the second string: Kasyap KrishnaKasyap
2. concat()メソッドを使う
Stringクラスのconcat()メソッドは、引数として受け取った文字列を現在の文字列の末尾に追加し、連結結果を新しい文字列として返します。
サンプルコード
import java.util.Scanner;
public class StringExample {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter the first string: ");
String str1 = sc.next();
System.out.println("Enter the second string: ");
String str2 = sc.next();
// 2つの文字列を連結
String result = str1.concat(str2);
System.out.println(result);
}
}
実行結果
Enter the first string: Krishna Enter the second string: Kasyap KrishnaKasyap
3. StringBuffer / StringBuilderクラスを使う
StringBufferおよびStringBuilderクラスは、内容の変更が必要な場合にStringの代わりとして利用できるクラスです。Stringと異なり可変(ミュータブル)であり、文字列を操作するためのさまざまなメソッドを備えています。
これらのクラスのappend()メソッドは、引数の文字列を現在のオブジェクトの末尾に追加します。ループ処理などで繰り返し文字列を連結する場合、「+」演算子のように毎回新しいオブジェクトが生成されることがないため、パフォーマンス面で有利です。
サンプルコード
import java.util.Scanner;
public class StringExample {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter the first string: ");
String str1 = sc.next();
System.out.println("Enter the second string: ");
String str2 = sc.next();
StringBuilder sb = new StringBuilder(str1);
// 2つの文字列を連結
sb.append(str2);
System.out.println(sb);
}
}
実行結果
Enter the first string: Krishna Enter the second string: Kasyap KrishnaKasyap
使い分けのポイント
- 「+」演算子: 簡単な連結に最適です。少ない回数の連結であれば可読性の高さがメリットになります。
- concat(): String型のまま扱いたい場合に有効ですが、引数にnullが渡されるとNullPointerExceptionが発生する点に注意が必要です。
- StringBuilder: ループ内など大量の連結を行う場面で高速に動作します。スレッドセーフではないため、シングルスレッド環境に向いています。
- StringBuffer: StringBuilderと同様の機能を持ちながらスレッドセーフであるため、マルチスレッド環境での文字列連結に適しています(その分やや低速です)。
-
JavaでUnsupportedOperationExceptionが発生する原因と回避方法を解説
UnsupportedOperationExceptionは、JavaにおけるRuntimeExceptionのサブクラスの一つで、要求された操作がサポートされていないことを示すためにスローされる例外です。この例外クラスはJava Collections Frameworkの一部であり、List、Queue、Set、Mapといった具象コレクションクラスのほとんどからスローされる可能性があります。 UnsupportedOperationExceptionの構文 public class UnsupportedOperationException extends RuntimeException
-
Javaで文字列を比較する方法|equals()とequalsIgnoreCase()の使い分けを徹底解説
Javaで文字列の等価性を比較する際は、Stringクラスが提供するequalsメソッドまたはequalsIgnoreCaseメソッドを使用するのが基本です。この記事では、それぞれのメソッドの使い方に加えて、==演算子で文字列を比較してはいけない理由についても詳しく解説します。 equals()メソッドで文字列を比較する 2つの文字列を比較し、大文字と小文字の違いまで厳密に判定したい場合はequals()メソッドを使用します。 次のコード例では、2つのStringインスタンスが大文字小文字を含むすべての文字において一致しているかどうかを判定しています。 public class Compare