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