Java 文字列を結合する(StringBuilder/+/concat/join)

Javaの文字列を結合するサンプルです。

目次

文字列を結合 StringBuilderで結合する
  StringBufferで結合する
  +演算子で結合する
  concatで連結する
Java8から joinで結合する

StringBuilderで結合する

public StringBuilder append(String str)
  • StringBuilderクラスのappendメソッドです。
  • 文字列を結合します。
  • 単一のスレッドで動作することを前提にしているため速いです。
  • 文字列の結合時に新たなインスタンスは生成されません
  • 文字列がnullの場合、nullという文字が追加されます。
  • appendメソッドの引数にint型、long型等も可能です。文字列として結合します。
  • 以下はJava8 API仕様のStringBuilderクラスのリンクです。
    https://docs.oracle.com/javase/jp/8/docs/api/java/lang/StringBuilder.html

StringBuilderで文字列を結合するサンプルです。

package test1;
 
public class Test1 {
	public static void main(String[] args) {

		String s1 = "あいう";
		String s2 = "えお";
		
		StringBuffer sb = new StringBuffer();
		sb.append(s1); 
		sb.append(s2);
		System.out.println(sb.toString());// あいうえお
		
		String s3 = null;
		sb.append(s3); 
		System.out.println(sb.toString());// あいうえおnull
		
		int s4 = 100;
		sb.append(s4); 
		System.out.println(sb.toString());// あいうえおnull100
 	}
}

10,11行目のappendメソッドで文字列を結合しています。
13行目のtoStringメソッドは文字列を返します。

StringBufferで結合する

public StringBuffer append(String str)
  • StringBufferクラスのappendメソッドです。
  • 文字列を結合します。
  • 複数のスレッドで動作することを前提にしていて排他制御がある分遅いです。
  • 文字列の結合時に新たなインスタンスは生成されません
  • 文字列がnullの場合、nullという文字が追加されます。
  • appendメソッドの引数にint型、long型等も可能です。文字列として結合します。
  • 以下はJava8 API仕様のStringBufferクラスのリンクです。
    https://docs.oracle.com/javase/jp/8/docs/api/java/lang/StringBuffer.html

StringBufferで文字列を結合するサンプルです。

package test1;
 
public class Test1 {
	public static void main(String[] args) {

		String str1 = "あいう";
		String str2 = "えお";
		
		StringBuffer stringBuffer = new StringBuffer();
		stringBuffer.append(str1); 
		stringBuffer.append(str2);
		
		String str3 = new String(stringBuffer);
		System.out.println(str3);// あいうえお
//		System.out.println(stringBuffer.toString());// あいうえお
 	}
}

10,11行目のappendメソッドで文字列を結合しています。
13,15行目はStringBufferからStringに変換しています。

+演算子で結合する

文字列 + 文字列
  • 文字列同士を+演算子で結合すると新たなインスタンスが生成されます。
    そのためループの中で+演算子を使用するとパフォーマンス低下やメモリ不足が発生するおそれがあります。
  • 文字列のリテラル同士の+演算子の結合はコンパイル時に行われるため速度は速いです。
    →リテラルとは、コードに記述された値のことです。
  • 変数同士の結合や変数とリテラルの結合に注意する必要があります。

+演算子で結合するサンプルです。

package test1;
 
public class Test1 {
	public static void main(String[] args) {
		
		System.out.println("ab" + "c");// abc
 	}
}

6行目は、文字列のリテラル同士を結合しています。
この場合の結合はコンパイル時に行われます。

concatで連結する

public String concat(String str)

concatで連結するサンプルです。

package test1;
 
public class Test1 {
	public static void main(String[] args) {
		
		String s1 = "あいう";
		String s2 = "えお";
		
		String s3 = s1.concat(s2);
		
		System.out.println(s3);// あいうえお
 	}
}

9行目は、concatメソッドで文字列の最後に文字列を追加しています。

joinで結合する

public static String join(CharSequence delimiter,CharSequence... elements)
  • Stringクラスのjoinメソッドです。Java8で追加されました。
  • 指定された引数で文字列を結合します。
  • 1つ目の引数は区切り文字です。
  • 2つ目の引数は結合する文字列です。任意の数を指定できます。
  • 文字列の結合時に新たなインスタンスは生成されます。
  • 文字列がnullの場合、nullという文字が追加されます。
  • 配列とリストの各値も結合できます。
  • 以下はJava8 API仕様のStringクラスのjoinメソッドのリンクです。
    https://docs.oracle.com/javase/jp/8/docs/api/java/lang/String.html#join-java.lang.CharSequence-java.lang.CharSequence...-

joinで結合するサンプルです。

package test1;

import java.util.Arrays;
import java.util.List;

public class Test1 {
    public static void main(String[] args) {
          
        String a = String.join("","あい","うえ","お");
        System.out.println(a);// あいうえお
        
        String b = String.join("-","あい","うえ","お");
        System.out.println(b);// あい-うえ-お
        
        // 配列の各値を結合
        String[] colors1 = {"赤","黄","青"};
        String c = String.join("-",colors1);
        System.out.println(c);// 赤-黄-青
        
        // リストの各値を結合
        List<String> colors2 = Arrays.asList(colors1);
        String d = String.join("+",colors2);
        System.out.println(d);// 赤+黄+青
    }
}

9,12行目は文字列リテラルをjoinメソッドで結合しています。
17行目は配列の値を結合しています。
21行目は配列をリストに変換しています。
22行目はリストのそれぞれの値を+で結合しています。

関連の記事

Java 文字列の位置を取得(indexOf/lastIndexOf)
Java substring 文字列を切り出す
Java valueOf 数値と文字列を変換する

△上に戻る