Java Language
StringBuilder
サーチ…
前書き
Java StringBuilderクラスは、変更可能な(変更可能な)文字列を作成するために使用されます。 Java StringBuilderクラスは、同期していない点を除いて、StringBufferクラスと同じです。 JDK 1.5以降で使用できます。
構文
新しいStringBuilder()
新しいStringBuilder(int容量)
新しいStringBuilder(CharSequence seq)
新しいStringBuilder(StringBuilder Builder)
新しいStringBuilder(文字列)
新しいStringJoiner(CharSequence区切り文字)
新しいStringJoiner(CharSequence区切り文字、CharSequence接頭辞、CharSequence接尾辞)
備考
char
型をパラメータとして新しいStringBuilder
を作成すると、引数int capacity
を持つコンストラクタが呼び出され、引数String string
は使用されません。
StringBuilder v = new StringBuilder('I'); //'I' is a character, "I" is a String.
System.out.println(v.capacity()); --> output 73
System.out.println(v.toString()); --> output nothing
n回Stringを繰り返します。
問題:作成String
含むn
の繰り返しString s
。
簡単なアプローチは、繰り返しString
を連結することです
final int n = ...
final String s = ...
String result = "";
for (int i = 0; i < n; i++) {
result += s;
}
これは、作成n
に1を含む新しい文字列インスタンスn
の繰り返しs
の実行時に得られたO(s.length() * n²) = O(s.length() * (1+2+...+(n-1)+n))
。
これを避けるには、 StringBuilder
を使用する必要があります。これにより、代わりにO(s.length() * n)
String
を作成できます。
final int n = ...
final String s = ...
StringBuilder builder = new StringBuilder();
for (int i = 0; i < n; i++) {
builder.append(s);
}
String result = builder.toString();
StringBuffer、StringBuilder、FormatterおよびStringJoinerの比較
StringBuffer
、 StringBuilder
、 Formatter
およびStringJoiner
クラスは、主に他の情報から文字列をアセンブルするために使用されるJava SEユーティリティクラスです。
StringBuffer
クラスはJava 1.0以降に存在し、一連の文字を含む「バッファ」を構築および変更するためのさまざまなメソッドを提供します。元の
StringBuffer
クラスのパフォーマンスの問題に対処するために、StringBuilder
クラスがJava 5に追加されました。 2つのクラスターのAPIは本質的に同じです。StringBuffer
とStringBuilder
の主な違いは、前者はスレッドセーフであり、後者は同期していないことです。
次の例は、 StringBuilder
使用方法を示しています。
int one = 1;
String color = "red";
StringBuilder sb = new StringBuilder();
sb.append("One=").append(one).append(", Color=").append(color).append('\n');
System.out.print(sb);
// Prints "One=1, Colour=red" followed by an ASCII newline.
( StringBuffer
クラスは同じ方法で使用されます:上記のStringBuilder
をStringBuffer
に変更するだけです)
StringBuffer
とStringBuilder
クラスは、組み立ておよび変更文字列の両方に適しています。すなわち、文字を置き換えたり削除したり、さまざまな方法でそれらを追加する方法を提供します。残っている2つのクラスは、文字列を組み立てるタスクに固有です。
Formatter
クラスはJava 5で追加され、C標準ライブラリのsprintf
関数で緩やかにモデル化されています。埋め込み書式指定子とその他の引数のシーケンスを持つ書式文字列をとり、引数をテキストに変換して書式指定子の代わりに置換して文字列を生成します。書式指定子の詳細は、引数をテキストに変換する方法を示します。StringJoiner
クラスはJava 8で追加されました。特別な目的のフォーマッタで、一連の文字列を区切り文字でStringJoiner
フォーマットします。これは流暢な APIで設計されており、Java 8ストリームで使用できます。
Formatter
一般的な使用例を次に示します。
// This does the same thing as the StringBuilder example above
int one = 1;
String color = "red";
Formatter f = new Formatter();
System.out.print(f.format("One=%d, colour=%s%n", one, color));
// Prints "One=1, Colour=red" followed by the platform's line separator
// The same thing using the `String.format` convenience method
System.out.print(String.format("One=%d, color=%s%n", one, color));
StringJoiner
クラスは上記のタスクには適していないので、ここでは文字列の配列の書式設定の例を示します。
StringJoiner sj = new StringJoiner(", ", "[", "]");
for (String s : new String[]{"A", "B", "C"}) {
sj.add(s);
}
System.out.println(sj);
// Prints "[A, B, C]"
4つのクラスのユースケースを要約できます。
- 任意の文字列アセンブリまたは文字列変更タスクに適した
StringBuilder
。 -
StringBuffer
は、スレッドセーフバージョンのStringBuilder
が必要な場合にのみ使用します。 -
Formatter
は、より豊富な文字列書式設定機能を提供しますが、StringBuilder
ほど効率的ではありません。これは、Formatter.format(...)
呼び出すたびに次のことがFormatter.format(...)
ためFormatter.format(...)
。-
format
文字列を解析し、 - varargs配列の作成と移植
- 任意のプリミティブ型引数をオートボクシングする。
-
-
StringJoiner
は、文字列のシーケンスをセパレータで簡潔かつ効率的にフォーマットしますが、他のフォーマット作業には適していません。