Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
new StringBuilder() / ビルダー.append() / insert()
文字列を可変オブジェクトとして操作するためのクラスです。Javaの String は不変(immutable)なのでループ内で + 演算子による文字列結合を繰り返すとパフォーマンスが低下しますが、StringBuilder を使えば内部バッファを書き換えるだけなので効率的です。
構文
// 空の StringBuilder を作成します。 new StringBuilder(); // 初期文字列を指定して作成します。 new StringBuilder(String str); // 末尾に追加します。 ビルダー.append(value); // 指定した位置に挿入します。 ビルダー.insert(int offset, value); // 指定した範囲を削除します。 ビルダー.delete(int start, int end); // 指定した位置の文字を削除します。 ビルダー.deleteCharAt(int index);
メソッド一覧
| メソッド | 概要 |
|---|---|
| new StringBuilder() | 空の可変文字列オブジェクトを作成します。初期容量は16文字です。 |
| new StringBuilder(String str) | 指定した文字列を初期値として持つ StringBuilder を作成します。 |
| append(value) | 末尾に値を追加します。String、int、double、char、boolean などあらゆる型を渡せます。自身を返すのでメソッドチェーンが可能です。 |
| insert(int offset, value) | 指定したインデックスの位置に値を挿入します。それ以降の文字は後ろにシフトされます。 |
| delete(int start, int end) | start から end の直前までの文字を削除します。 |
| deleteCharAt(int index) | 指定したインデックスの文字を1文字だけ削除します。 |
サンプルコード
// ループで文字列を効率的に構築します。
StringBuilder sb = new StringBuilder();
for (int i = 1; i <= 5; i++) {
sb.append(i);
if (i < 5) sb.append(", ");
}
System.out.println(sb.toString()); // 『1, 2, 3, 4, 5』と出力されます。
// メソッドチェーンで連続して追加できます。
StringBuilder greeting = new StringBuilder()
.append("Hello")
.append(", ")
.append("Java")
.append("!");
System.out.println(greeting); // 『Hello, Java!』と出力されます。
// insert() で途中に文字列を挿入します。
StringBuilder sb2 = new StringBuilder("Hello World");
sb2.insert(5, ","); // 5番目の位置にカンマを挿入します。
System.out.println(sb2); // 『Hello, World』と出力されます。
// delete() で範囲を削除します。
StringBuilder sb3 = new StringBuilder("Java is great!");
sb3.delete(8, 14); // 『great』を削除します。
System.out.println(sb3); // 『Java is !』と出力されます。
// deleteCharAt() で1文字を削除します。
StringBuilder sb4 = new StringBuilder("Jaava");
sb4.deleteCharAt(2); // 余分な 'a' を削除します。
System.out.println(sb4); // 『Java』と出力されます。
概要
StringBuilder は可変の文字列クラスで、文字列の追加・挿入・削除を内部バッファの書き換えで効率的に行います。ループ内で String の + 演算子を多用すると毎回新しいオブジェクトが生成されてパフォーマンスが低下するため、繰り返し結合する処理では StringBuilder を使用してください。
マルチスレッド環境でスレッドセーフな操作が必要な場合は、同じAPIを持つ StringBuffer を使用してください。ただし、StringBuffer はすべてのメソッドが同期化されており、シングルスレッドでは StringBuilder より低速です。
反転・置換・変換には『reverse() / replace() / toString()』、文字列の結合には『String.join()』も使用できます。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。