StringBuilder.Replace()はString.Replaceより効率的ですか?
-
08-07-2019 - |
質問
String.Replace()を使用してテストを50回置き換える必要がある場合、基本的には新しいストリングを50回作成する必要があります。 StringBuilder.Replace()はこれをより効率的に行いますか?たとえば、多くのテキストを置換する場合、データを追加しなくてもStringBuilderを使用する必要がありますか?
.NETを使用していますが、これはJavaやおそらく他の言語と同じだと思います。
解決
これは、StringBuilderがまさに使用するタイプです-同じテキストオブジェクトの繰り返し変更-繰り返しの連結だけではありませんが、最も一般的に使用されているように見えます。
他のヒント
置換のサイズが置換された文字列よりも大きいかどうかによって異なります。
StringBuilderはバッファを過剰に割り当てます。一方、文字列はその中に含まれる文字数を保持します。
StringBuilder.Capacityプロパティはバッファが保持する文字数であり、StringBuilder.Lengthは使用中の文字数です。
通常、StringBuilder.Capacityには、予想される結果の文字列よりも大きい値を設定する必要があります。それ以外の場合、StringBuilderはバッファを再割り当てする必要があります。 StringBuilderがバッファを再割り当てすると、サイズが2倍になります。これは、カップルが再割り当てした後、おそらく必要以上に大きくなることを意味します。デフォルトでは容量は16から始まります。
(たとえばコンストラクターで)起動時にCapacity値を設定することにより、StringBuilderのバッファーの再割り当てを保存します。 StringBuilder.MaxCapacityを使用して、StringBuilderを拡張できる最大容量に制限できます。
はい、そうです。 String.Replace
は常に新しい文字列を作成します– StringBuilder.Replace
はサポートしていません。