C#におけるStringBuilderクラスの使用概要

3928 ワード

Stringオブジェクトは変更できません.System.Stringクラスのメソッドを使用するたびに、メモリに新しい文字列オブジェクトを作成します.これには、新しいオブジェクトに新しいスペースを割り当てる必要があります.文字列の繰り返し変更が必要な場合、新しいStringオブジェクトの作成に関連するシステムオーバーヘッドは非常に高価になる可能性があります.新しいオブジェクトを作成せずに文字列を変更する場合は、System.Text.StringBuilderクラスを使用します.たとえば、StringBuilderクラスを使用すると、1サイクルで複数の文字列が結合されるとパフォーマンスが向上します.
次の例で説明したように、リロードされたコンストラクション関数メソッドで変数を初期化することで、StringBuilderクラスの新しいインスタンスを作成できます.
StringBuilder MyStringBuilder = new StringBuilder("Hello World!");
(一)容量と長さを設定StringBuilderオブジェクトは動的オブジェクトであり、カプセル化された文字列の文字数を拡張できますが、収容できる最大文字数に値を指定できます.この値をオブジェクトの容量と呼び、現在のStringBuilderオブジェクトに格納されている文字列の長さと混同してはいけません.たとえば、StringBuilderクラスの文字列「Hello」(長さ5)を持つ新しいインスタンスを作成し、オブジェクトの最大容量を25と指定できます.StringBuilderを変更すると、容量に達するまでスペースは再割り当てされません.容量に達すると、新しいスペースが自動的に割り当てられ、容量が2倍になります.StringBuilderクラスの容量は、リロードされたコンストラクション関数の1つを使用して指定できます.次のコード例では、MyStringBuilderオブジェクトを最大25個の空白に拡張できます.StringBuilder MyStringBuilder = new StringBuilder("Hello World!", 25); また、読み取り/書き込みCapacityプロパティを使用して、オブジェクトの最大長を設定できます.次のコード例では、Capacityプロパティを使用してオブジェクトの最大長を定義します.MyStringBuilder.Capacity = 25;
(2)以下に、(1)Appendメソッドは、現在のStringBuilderオブジェクトによって表される文字列の末尾にテキストまたはオブジェクトの文字列表現形式を追加するために使用することができるいくつかの一般的な方法を示す.次の例では、StringBuilderオブジェクトを「Hello World」に初期化し、オブジェクトの最後にテキストを追加します.必要に応じて自動的にスペースが割り当てられます.StringBuilder MyStringBuilder = new StringBuilder("Hello World!"); MyStringBuilder.Append("What a beautiful day."); Console.WriteLine(MyStringBuilder); この例ではHello World!What a beautiful day.コンソールに表示されます.
(2)AppendFormatメソッドは、StringBuilderの末尾にテキストを追加し、IFOrmattableインタフェースを実装するので、フォーマットセクションで説明した標準フォーマット文字列を受け入れることができる.この方法では、変数のフォーマットをカスタマイズし、StringBuilderの後に追加できます.次の例では、AppendFormatメソッドを使用して、StringBuilderの最後に通貨値フォーマットに設定された整数値を配置します.int MyInt = 25; StringBuilder MyStringBuilder = new StringBuilder("Your total is "); MyStringBuilder.AppendFormat("{0:C} ", MyInt); Console.WriteLine(MyStringBuilder); この例では、Your total is$25.00をコンソールに表示します.
(3)Insertメソッドは、文字列またはオブジェクトを現在のStringBuilderの指定された場所に追加します.次の例では、StringBuilderの6番目の場所に単語を挿入します.StringBuilder MyStringBuilder = new StringBuilder("Hello World!"); MyStringBuilder.Insert(6,"Beautiful "); Console.WriteLine(MyStringBuilder); この例では、Hello Beautiful World!コンソールに表示されます.
(4)Removeメソッドを使用して現在のStringBuilderから指定された数の文字を削除し、削除プロセスは指定されたゼロから始まるインデックスから開始することができる.次の例では、Removeメソッドを使用してStringBuilderを短縮します.StringBuilder MyStringBuilder = new StringBuilder("Hello World!"); MyStringBuilder.Remove(5,7); Console.WriteLine(MyStringBuilder); この例では、Helloをコンソールに表示します.
(5)Replaceメソッドを使用すると、StringBuilderオブジェクト内の文字を別の指定文字で置き換えることができます.次の例では、StringBuilderオブジェクトを検索し、感嘆符(!)をすべて検索し、疑問符(?)で置き換えます.StringBuilder MyStringBuilder = new StringBuilder("Hello World!"); MyStringBuilder.Replace('!', '?'); Console.WriteLine(MyStringBuilder); この例ではHello World?コンソールに表示されます.
====================================================================================================================================
C#言語は一般的なものですが、ここでは主にC#StringBuilderとStringについて紹介します.多くの文字列のつなぎ合わせや、ある文字列を頻繁に操作するときにStringBuilderを使用したほうがいい、Stringを使用しないなどの面を紹介します.C#StringBuilderとStringの違いStringは、割り当て、接合などの演算時に新しいインスタンスを生成しますが、StringBuilderは生成しません.したがって、多数の文字列をつなぎ合わせたり、頻繁に文字列を操作する場合はStringBuilderを使用することが望ましい.Stringを使用しないでください.また、StringBuilderとStringについては、1.参照タイプであり、スタックにメモリを割り当てる2.演算時に新しいインスタンス3.Stringオブジェクトが生成されると変更できない(Immutable)と言わざるを得ません.4.等しい演算子(==および!=)を定義するのは、参照ではなくStringオブジェクトの値C#StringBuilderとStringの例を比較するためです.
using System;  
using System.Collections.Generic;  
using System.Text;  
   
namespace Example22  
{  
class Program  
{  
static void Main(string[] args)  
{  
const int cycle = 10000;  
   
long vTickCount = Environment.TickCount;  
String str = null;  
for (int i = 0; i 

変換元:http://www.jb51.net/article/45832.htm
http://developer.51cto.com/art/200908/147430.htm