サーチ…


前書き

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の比較

StringBufferStringBuilderFormatterおよびStringJoinerクラスは、主に他の情報から文字列をアセンブルするために使用されるJava SEユーティリティクラスです。

  • StringBufferクラスはJava 1.0以降に存在し、一連の文字を含む「バッファ」を構築および変更するためのさまざまなメソッドを提供します。

  • 元のStringBufferクラスのパフォーマンスの問題に対処するために、 StringBuilderクラスがJava 5に追加されました。 2つのクラスターのAPIは本質的に同じです。 StringBufferStringBuilderの主な違いは、前者はスレッドセーフであり、後者は同期していないことです。

次の例は、 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クラスは同じ方法で使用されます:上記のStringBuilderStringBufferに変更するだけです)

StringBufferStringBuilderクラスは、組み立ておよび変更文字列の両方に適しています。すなわち、文字を置き換えたり削除したり、さまざまな方法でそれらを追加する方法を提供します。残っている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は、文字列のシーケンスをセパレータで簡潔かつ効率的にフォーマットしますが、他のフォーマット作業には適していません。


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow