スライドショー

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

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

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

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

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のさまざまな使い方については、以下の記事にまとめていますので、ぜひ参考にしてくださいね!

まとめ

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

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

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

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

ヤマシタ

システムエンジニアとして10年勤務→フリーランスへ。現在は侍ブログ編集部としてこれまでに200記事以上の記事を執筆。
大規模システム開発からWebアプリ開発まで経験あり。最近ではPythonの機械学習に挑戦中。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説