在 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 - 将通过处理复合格式字符串(包含零个或多个格式项)返回的字符串附加到此实例。每个格式项都替换为相应对象参数的字符串表示形式。
AppendJoin - 连接所提供数组中元素的字符串表示形式对象,在每个成员之间使用指定的分隔符,然后将结果附加到字符串生成器的当前实例。
AppendLine - 附加默认行终止符到当前 StringBuilder 对象的末尾。
Clear - 从当前 StringBuilder 实例中删除所有字符。
CopyTo - 将字符复制到目标字符范围或字符数组。
EnsureCapacity − 确保此 StringBuilder 实例的容量至少为指定值。
等于 − 如果此实例和提供的实例具有,则返回 true相等的字符串、Capacity 和 MaxCapacity 值。
GetChunks - 返回可用于迭代字符块的对象。
Insert - 将指定对象的字符串表示形式插入到此实例的指定字符位置。
删除 - 从此实例中删除指定范围的字符。
替换 - 替换所有出现的指定字符或此实例中的字符串与另一个指定的字符或字符串。
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中文网其他相关文章!