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のさまざまな使い方については、以下の記事にまとめていますので、ぜひ参考にしてくださいね!
まとめ
ここでは、さまざまな文字列の結合方法や注意点、カンマ区切りでの結合方法や、それぞれの結合処理の速度比較などを行いました。
文字列を結合する処理は、さまざまな場面で使用することがあります。
もし、文字列を結合する方法を忘れてしまったら、この記事を思い出してくださいね!






