C# では、文字列は不変です。これは、文字列を作成した後は変更できないことを意味します。文字列を変更すると、その変更を含む新しい文字列が返されますが、元の文字列は変更されません。
string word = "aaabbbccc"; string newWord = word.Replace('b', 'd'); Console.WriteLine(word); // prints aaabbbccc Console.WriteLine(newWord); // prints aaadddccc
StringBuilder クラスは、変更可能な文字列のようなオブジェクト、つまり可変文字列を表します。これは、不変の文字列を表す文字列型とは異なる方法で実装されます。
文字列オブジェクトを変更するとコピーが作成されるため、文字列オブジェクトを繰り返し変更するとパフォーマンスが低下する可能性があります。繰り返しが小さい場合は無視できますが、ループが大きい場合は重大な問題になる可能性があります。 StringBuilder は、文字の追加、削除、置換、または挿入による文字列の変更に代わる効率的な手段を提供します。
StringBuilder は、文字を保持する内部バッファを維持します。バッファに空き領域がある場合は、新しいデータが追加されます。それ以外の場合は、新しいバッファを作成し、古いデータを新しいバッファにコピーして、データを追加します。
var sb = new StringBuilder(); for (int i = 0; i < 10; i++){ sb.Append("a"); } Console.WriteLine(sb.ToString()); // prints aaaaaaaaaa
StringBuilder オブジェクトを構築するさまざまな方法を次に示します。
// Initialize a new instance of StringBuilder var sb1 = new StringBuilder(); // Initialize a new instance of StringBuilder using the given capacity var sb2 = new StringBuilder(capacity: 10); // Initialize a new instance of StringBuilder with the given string var sb3 = new StringBuilder(value: "Hello World"); // Initialize a new instance of StringBuilder with the given capacity and the maximum capacity it can grow to var sb4 = new StringBuilder(capacity: 20, maxCapacity: 10); // Initialize a new instance of StringBuilder with the given string and capacity var sb5 = new StringBuilder(value: "Hello", capacity: 20); // Initialize a new instance of StringBuilder from the given substring and capacity var sb6 = new StringBuilder(value: "Hello World", startIndex: 0, length: 5, capacity: 20);
StringBuilder クラスには、オブジェクトが現在保持している文字数を示す Length プロパティがあります。オブジェクトに文字が追加されると、その長さはその容量に達するまで増加します。この容量は、オブジェクトに現在含めることができる最大文字数を定義します。
追加された文字の数によって長さが現在の容量を超える場合、クラスはその容量を結合して新しいメモリを割り当てます。次に、新しい文字がオブジェクトに追加され、その Length プロパティが調整されます。
StringBuilder は、MaxCapacity プロパティの値に達するまで、メモリを動的に追加し続けます。その後、オブジェクトにそれ以上メモリを割り当てることはできなくなります。オブジェクトにさらにデータを追加しようとすると、ArgumentOutOfRangeException または OutOfMemoryException 例外がスローされます。
StringBuilder には、文字列を簡単に変更するための次のメソッドが用意されています。
#Append - 指定されたオブジェクトの文字列表現をこのインスタンスに追加します。
AppendFormat< /strong> - 複合フォーマット文字列 (0 個以上のフォーマット項目を含む) の処理によって返された文字列をこのインスタンスに追加します。各フォーマット項目は、対応するオブジェクト パラメータの文字列表現に置き換えられます。
AppendJoin - 各メンバー間に指定された区切り文字を使用して、指定された配列内の要素の文字列表現オブジェクトを結合し、結果を現在のインスタンスに追加します。文字列ビルダー。
AppendLine - 現在の StringBuilder オブジェクトの末尾にデフォルトの行終端文字を追加します。
Clear - 現在の StringBuilder インスタンスからすべての文字を削除します。
CopyTo - ターゲットの文字範囲または文字配列に文字をコピーします。
EnsureCapacity -この StringBuilder インスタンスの容量が少なくとも指定された値であることを確認します。
Equals -このインスタンスと指定されたインスタンスの文字列、Capacity、MaxCapacity の値が等しい場合、true を返します。
GetChunks - 文字のチャンクを反復処理するために使用できるオブジェクトを返します。
Insert - 指定されたオブジェクトの文字列表現を、このインスタンスの指定された文字位置に挿入します。
Delete - 指定された範囲の文字をこのインスタンスから削除します。
Replace - このインスタンス内の指定された文字または文字列のすべての出現を、別の指定された文字または文字列に置き換えます。
ToString - 現在のインスタンスを文字列に変換します。
ライブ デモンストレーション
using System; using System.Text; class Program{ static void Main(string[] args){ string word = "aaabbbccc"; string newWord = word.Replace('b', 'd'); Console.WriteLine(word); // prints aaabbbccc Console.WriteLine(newWord); // prints aaadddccc var sb = new StringBuilder(); for (int i = 0; i < 10; i++){ sb.Append("a"); } Console.WriteLine(sb.ToString()); // prints aaaaaaaaaa // Initialize a new instance of StringBuilder var sb1 = new StringBuilder(); // Initialize a new instance of StringBuilder using the given capacity var sb2 = new StringBuilder(capacity: 10); // Initialize a new instance of StringBuilder with the given string var sb3 = new StringBuilder(value: "Hello World"); // Initialize a new instance of StringBuilder with the given capacity and the maximum capacity it can grow to var sb4 = new StringBuilder(capacity: 20, maxCapacity: 50); // Initialize a new instance of StringBuilder with the given string and capacity var sb5 = new StringBuilder(value: "Hello", capacity: 20); // Initialize a new instance of StringBuilder from the given substring and capacity var sb6 = new StringBuilder(value: "Hello World", startIndex: 0, length: 5, capacity: 20); } }
aaabbbccc aaadddccc aaaaaaaaaa
以上がC# の StringBuilder クラスの目的は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。