Javaの文字列を連結するサンプルです。
| 確認環境 ・Java 8 |
目次
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
コード
サンプルのコードです。
package test1;
public class Test1 {
public static void main(String[] args) {
String s1 = "あいう";
String s2 = "えお";
StringBuilder sb = new StringBuilder();
sb.append(s1);
sb.append(s2);
System.out.println(sb.toString());// あいうえお
}
}
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
コード
サンプルのコードです。
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());// あいうえお
}
}
10,11行目のappendメソッドで文字列を連結しています。
13行目のtoStringメソッドは文字列を返します。
+演算子で連結する
- 文字列同士を+演算子で連結すると新たなインスタンスが生成されます。
そのためループの中で+演算子を使用するとパフォーマンス低下やメモリ不足が発生するおそれがあります。 - 文字列のリテラル同士の+演算子の連結はコンパイル時に行われるため速度は速いです。
→リテラルとは、コードに記述された値のことです。 - 変数同士の連結や変数とリテラルの連結に注意する必要があります。
コード
サンプルのコードです。
package test1;
public class Test1 {
public static void main(String[] args) {
System.out.println("ab" + "c");// abc
}
}
6行目は、文字列のリテラル同士を連結しています。
この場合の連結はコンパイル時に行われます。
joinで連結する(Java8で追加)
| public static String join(CharSequence delimiter,CharSequence... elements) |
- Stringクラスのjoinメソッドです。
- 指定された引数で文字列を連結します。
- 1つ目の引数は区切り文字です。
- 2つ目の引数は連結する文字列です。任意の数を指定できます。
- 文字列の連結時に新たなインスタンスは生成されます。
- 文字列がnullの場合、nullという文字が追加されます。
- 配列とリストの各値も連結できます。
- Java8で追加されました。
- 以下はJava8 API仕様のStringクラスのjoinメソッドのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/lang/String.html#join-java.lang.CharSequence-java.lang.CharSequence...-
コード
サンプルのコードです。
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 文字列を分割して配列にするサンプル(split)
Java 文字列の始め/終わりを確認するサンプル(startsWithとendsWith)
Java 文字列の長さを取得するサンプル(length)
Java 大文字と小文字を変換するサンプル(toLowerCaseとtoUpperCase)
Java 文字列の先頭と末尾の空白を取り除くサンプル(trim)
Java 文字列を置き換えるサンプル(replace)
Java 文字の位置を取得するサンプル(indexOfとlastIndexOf)
Java 文字列から文字列の一部を取得するサンプル(substring)
Java 数値と文字列の変換のサンプル(valueOf)
Java エスケープシーケンスのサンプル