【Java入門】Stringの結合方法まとめ

JavaのStringを扱う上で、文字列同士を結合することがあります。

文字列を結合する方法を知りたい
文字列がnullの場合の対処法を知りたい
文字列をカンマ区切りで結合する方法を知りたい
文字列を結合するメソッドの速度が知りたい

今回は、そんな悩みを解決するために、文字列を結合するための方法をわかりやすく解説します!

なお、Javaの記事については、こちらにまとめています。

目次

Stringの結合方法

ここでは、Stringの文字列を結合する方法を紹介します。

concatを使用する

文字列を結合するオーソドックスな方法として、Stringクラスのconcatメソッドを使用する方法があります。

以下にconcatメソッドを使用した文字列の結合方法を記述します。

public class Main {
    public static void main(String[] args) throws Exception {

        //Stringクラスのconcatを使用する
        String str1 = "apple";
        String str2 = "orange";
        
        String str = str1.concat(str2);
        System.out.println("str : " + str);
    }
}

実行結果

str : appleorange

サンプルでは2つのString型に文字列を設定し、変数str1に対してconcatメソッドで引数に変数str2を指定しています。

concatについては、以下の記事で詳しく解説しています!

StringBufferのappendを使用する

StringBufferクラスのappendメソッドを使用することでも、文字列を結合することが可能です。

以下にStringBufferクラスのappendメソッドを使用した結合方法を記述します。

public class Main {
    public static void main(String[] args) throws Exception {

        //StringBufferクラスのappendを使用する
        String str1 = "apple";
        String str2 = "orange";
        
        StringBuffer bf  = new StringBuffer();
        bf.append(str1);
        bf.append(str2);
        System.out.println("bf : " + bf.toString());
    }
}

実行結果

bf : appleorange

サンプルでは2つのString型に文字列を設定し、StringBufferクラスを宣言して、変数bfに対してappendメソッドを使用して文字列を結合しています。

StringBufferについては、以下の記事で詳しく解説しています!

StringBuilderのappendを使用する

StringBuilderクラスのappendメソッドを使用することでも文字列を結合することが可能です。

以下にStringBuilderクラスのappendメソッドを使用した結合方法を記述します。

public class Main {
    public static void main(String[] args) throws Exception {

        //StringBuilderクラスのappendを使用する
        String str1 = "apple";
        String str2 = "orange";
        
        StringBuilder sb  = new StringBuilder();
        sb.append(str1);
        sb.append(str2);
        System.out.println("sb : " + sb.toString());
    }
}

実行結果

sb : appleorange

サンプルでは2つのString型に文字列を設定し、StringBuilderクラスを宣言して、変数sbに対してappendメソッドを使用して文字列を結合しています。

StringBufferについては、以下の記事で詳しく解説しています!

結合する文字列がnullの場合

文字列を結合するときの注意点として、結合する文字列がnullだった場合、例外が投げられてしまいます。

以下の処理では、結合対象の文字列がnullで設定されているため、”java.lang.NullPointerException”の例外が発生します。

public class Main {
    public static void main(String[] args) throws Exception {

        String str1 = "apple";
        String str2 = null;
        
        String str = str1.concat(str2);
        System.out.println("str : " + str);
    }
}

そのため、例外を回避するにはStringUtilsクラスのisEmptyメソッドを使用します。
isEmptyメソッドについては、以下の記事で詳しく解説しています。

文字列をカンマ区切りで結合する

文字列を結合してCSVファイルなどに出力するときに、文字列の間に’,’(カンマ)を挿入したい場合があります。

カンマ区切りで文字列を結合する方法を、以下に記述します。

public class Main {
    public static void main(String[] args) throws Exception {

        //文字列をカンマ区切りで結合する
        String[] strArray = {"apple","orange","melon","banana","pineapple"};
        String sep = ",";
        
        StringBuilder sb = new StringBuilder();
        for(String str : strArray)
        {
            if (sb.length() > 0)
            {
                sb.append(sep);
            }
            
            sb.append(str);
        }
        System.out.println(sb.toString());
    }
}

実行結果

apple,orange,melon,banana,pineapple

サンプルではString型の配列に文字列を設定し、String型でカンマを設定しています。

次にStringBuilderクラスを宣言し、拡張for文の中で配列の要素ごとにappendメソッドを使用して、カンマと文字列を交互に結合しています。

速度面での比較

文字列を結合する基本的な方法を3通り説明しましたが、実際の処理パフォーマンスはどうなのでしょうか?

ここでは、紹介したStringクラスのconcatとStringBufferクラスのappend、StringBuilderクラスのappendの速度を、それぞれナノ秒単位で比較してみました。

public class Main {
    public static void main(String[] args) throws Exception {

        /* 文字列結合の速度判定 */
        /* StringクラスのconcatとStringBufferクラスのappend、*/
        /* StringBuilderクラスのappendをそれぞれ比較する */
        
        //1. concat
        long start1 = System.nanoTime();
        String strcon = "";
        for(int val=0; val<100; val++)
        {
            strcon = strcon.concat("strcon : " + Integer.toString(val) + "\n");
        }
        
        //concat終了時間
        long end1 = System.nanoTime();
        System.out.println("String.concat : " + (end1 - start1) / 1000000f + "ms");
        
        //2. StringBuffer.append
        long start2 = System.nanoTime();
        StringBuffer bf = new StringBuffer();
        for(int val=0; val<100; val++)
        {
            bf.append("bf : " + Integer.toString(val) + "\n");
        }
        //StringBuffer.append終了時間
        long end2 = System.nanoTime();
        System.out.println("StringBuffer.append : " + (end2 - start2) / 1000000f + "ms");
        
        //3. StringBuilder.append
        long start3 = System.nanoTime();

        StringBuilder sb = new StringBuilder();
        for(int val=0; val<100; val++)
        {
            sb.append("sb : " + Integer.toString(val) + "\n");
        }

        // StringBuilder.append終了時間
        long end3 = System.nanoTime();
        System.out.println("StringBuilder.append : " + (end3 - start3) / 1000000f + "ms");
    }
}

実行結果

String.concat : 0.679138ms
StringBuffer.append : 0.422932ms
StringBuilder.append : 0.253999ms

サンプルでは、ループの中でそれぞれ100回ずつ文字列を結合しています。

実行結果を確認する限りでは、StringBuilderクラスのappendが一番早いことがわかります。

次いでStringBufferクラスappend、一番遅いのがStringクラスのconcatとなりました。

Stringについてもっと詳しく知りたい方へ

Stringのさまざまな使い方については、以下の記事にまとめていますので、ぜひ参考にしてくださいね!

まとめ

ここでは、さまざまな文字列の結合方法や注意点、カンマ区切りでの結合方法や、それぞれの結合処理の速度比較などを行いました。

文字列を結合する処理は、さまざまな場面で使用することがあります。

もし、文字列を結合する方法を忘れてしまったら、この記事を思い出してくださいね!

この記事を書いた人

【プロフィール】
DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
【専門分野】
IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

目次