C# 中 StringBuilder 类的用途是什么?

c# 中 stringbuilder 类的用途是什么?

在 C# 中,字符串是不可变的。这意味着字符串一旦创建就无法修改。对字符串的任何修改都会返回一个包含修改的新字符串,而原始字符串保持不变。

string word = "aaabbbccc";string newWord = word.Replace('b', 'd');Console.WriteLine(word); // prints aaabbbcccConsole.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 StringBuildervar sb1 = new StringBuilder();// Initialize a new instance of StringBuilder using the given capacityvar sb2 = new StringBuilder(capacity: 10);// Initialize a new instance of StringBuilder with the given stringvar sb3 = new StringBuilder(value: "Hello World");// Initialize a new instance of StringBuilder with the given capacity and the maximum capacity it can grow tovar sb4 = new StringBuilder(capacity: 20, maxCapacity: 10);// Initialize a new instance of StringBuilder with the given string and capacityvar sb5 = new StringBuilder(value: "Hello", capacity: 20);// Initialize a new instance of StringBuilder from the given substring and capacityvar 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);   }}

输出

aaabbbcccaaadddcccaaaaaaaaaa

以上就是C# 中 StringBuilder 类的用途是什么?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1435262.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 10:57:26
下一篇 2025年12月7日 23:38:25

相关推荐

  • C# 中 IStructuralEquatable 接口有什么作用?

    IStructuralEquatable 接口定义了支持比较对象结构相等的方法,这意味着两个对象相等,因为它们具有相等的值。 它包括以下两个方法 – Sr.No 方法& 描述 1Equals(Object, IEqualityComparer) 该方法确定对象在结构上是否等于当前…

    2025年12月17日
    000
  • C# ASP.NET Core 中 IWebHostEnvironment 接口的作用是什么?

    IWebHostEnvironment 提供有关 Web 托管环境和应用程序正在运行。 属于命名空间 Microsoft.AspNetCore.Hosting IWebHostEnvironment 接口需要作为依赖项注入到控制器,然后在整个控制器中使用。 IWebHostEnvironment 接…

    2025年12月17日
    000
  • 使用 C# ASP.NET WebAPI 有哪些优点?

    WEB API 是更简单、轻量级服务的更好选择。 WEB API 可以使用任何包括 XML 的文本格式,比 WCF 更快。 它的工作方式与 HTTP 的工作方式相同,使用标准 HTTP 动词,如 GET、POST、PUT、DELETE 适用于所有增删改查操作。 完全支持路由 使用 MediaType…

    2025年12月17日
    000
  • C#中参数是如何传递的?

    参数在 C# 中通过值或引用传递。这样,您还可以使用 out 参数和 param 数组来传递参数 – Value 此方法将参数的实际值复制到函数的形式参数中。在这种情况下,对函数内部形参所做的更改不会对实参产生任何影响。 参考 此方法将对实参内存位置的引用复制到形参中。这意味着对参数所做…

    2025年12月17日
    000
  • C# 条件表达式的数字提升

    数值提升是将较小的类型提升为较大的类型,例如从short到int。 在下面的示例中,我们在条件表达式中看到了数值提升。 p> 短类型会自动提升为更大的 int 类型。 示例 using System;class Program { static void Main() { short val1…

    2025年12月17日
    000
  • C# 中的混合字典类?

    HybridDictionary类通过使用ListDictionary在集合较小时实现IDictionary,然后在集合变大时切换到Hashtable。 以下是HybridDictionary类的属性: 序号 属性和描述 1Count 获取包含的键/值对的数量 混合字典。 2IsFixedSize …

    2025年12月17日
    000
  • C# 7.0 中的二进制文字和数字分隔符是什么?

    二进制文字 – 在 C# 7 之前,我们只能将十进制和十六进制值分配给 a变量。 在 C# 7.0 中引入了二进制文字,它允许我们将二进制值传递给变量。 数字分隔符 – 数字分隔符采用单个下划线 (_) 的形式。这个分隔符可以用作为提高易读性的一种方法,可以在任何数字文字中使…

    2025年12月17日
    000
  • C# 中的 CopyOnWriteArrayList 版本

    Java有CopyOnWriteArrayList,但C#没有。为此,应该优先使用C#中的SynchronizedCollection类。 SynchronizedCollection是一个包含特定类型对象的线程安全集合。以下是语法。 public class SynchronizedCollect…

    2025年12月17日
    000
  • C#中的Lambda表达式是什么?

    Lambda 表达式是表示匿名方法的更好方法。匿名方法和 Lambda 表达式都允许您内联定义方法实现,但是,匿名方法显式要求您定义方法的参数类型和返回类型。 以表达式作为其表达式的表达式 lambda身体:(input−parameters) => 表达式 以语句块作为其主体的语句 lamb…

    2025年12月17日
    000
  • C#中如何获取文件大小?

    FileInfo类用于在C#中处理文件及其操作。 它提供了用于创建、删除和读取文件的属性和方法。它使用StreamWriter 类将数据写入文件。它是 System.IO 命名空间的一部分。 Directory 属性检索表示文件父目录的对象。 DirectoryName 属性检索父目录的完整路径 E…

    2025年12月17日
    000
  • C# 中的装箱和拆箱

    装箱 装箱是将值类型隐式转换为引用类型。 拆箱 拆箱是将装箱创建的引用类型显式转换回值类型。 示例 让我们看看示例代码片段 – // intint myVal = 12;// Boxingobject myBoxed = myVal;// Unboxingint myUnBoxed = …

    2025年12月17日
    000
  • C# 中的继承与组合

    继承 通过继承,您可以指定新类应继承现有类的成员。这个现有类称为基类,新类称为派生类。继承实现了 IS-A 关系。例如,哺乳动物是一种动物,狗是一种哺乳动物,因此狗也是一种动物,依此类推。 例如,基类 Shape 具有派生类,例如 Circle、Square、Rectangle等 组合 在组合下,如…

    2025年12月17日
    000
  • 如何在 C# 中迭代​​任何 Map

    C# 没有内置的数学类型。同样,使用字典。 首先,创建一个字典 – Dictionary d = new Dictionary();d.Add(“keyboard”, 1);d.Add(“mouse”, 2); 获取钥匙 – var val = d.Keys.ToList()…

    2025年12月17日
    000
  • C# 中的集合类是什么?

    集合类具有各种用途,例如动态分配内存给元素,根据索引访问项目列表等。 以下是Collections中的类: 序号 类别和描述和用法 1ArrayList 它表示一个可以单独索引的对象的有序集合。 2Hashtable 它使用键来访问集合中的元素。 3SortedList 它使用键和索引来访问列表中的…

    2025年12月17日
    000
  • C# 程序复制现有文件

    使用 File.Copy 方法复制现有文件。 添加要复制的文件的路径。 String myPath = @”D:one.txt”; 现在将上述文件复制到以下文件中 − String myPath = @”D:one.txt”; 使用 File.Copy 方法,同时指定源文件和目标文件。 File.C…

    2025年12月17日
    000
  • C# 中的 public、static 和 void 关键字有什么区别?

    所有这些关键字都是任何 C# 程序的 main 方法的一部分。 Main 方法是所有 C# 程序的入口点,说明类在执行时执行的操作。 > using System;class Demo { static void Main(string[] args) { Console.WriteLine(…

    2025年12月17日
    000
  • C# 中的协变和逆变

    为了有效地处理类,请使用协方差和反方差的概念。 让我们将以下内容视为我们的课程。一是二类的基类,而二是三类的基类。 class One { }class Two: One {}class Three : Two { } 基类可以包含派生类,但反之则不可能。通过协方差,您可以在需要基类型的地方传递派生…

    2025年12月17日
    000
  • C# 中什么是一元运算符?

    以下是 C# 中的一元运算符 – + – ! ~ ++ — (type)* & sizeof 让我们了解一下 sizeof 运算符。 sizeof 返回数据类型的大小。 假设您需要查找 int 数据类型的大小 – sizeof(int) 对于双数据类型 &#8211…

    2025年12月17日
    000
  • C# 程序估计文件夹的大小

    简介 在本文中,我们将了解估算文件夹大小的 C# 程序。在我们的电脑上,我们将文件存储在一个称为文件夹的目录中。我们还将了解如何估计文件中存在的文件夹的大小。仅计算文件大小不足以达到我们的目标。相反,我们还需要计算文件夹和子文件夹的大小。 下面的文章将分三部分来讲解如何计算文件夹的大小。我们要知道的…

    2025年12月17日
    000
  • C# 中的托管代码是什么?

    托管代码是由公共语言运行时(CLR)管理执行的代码。它获取托管代码并将其编译为机器代码。之后,代码被执行。 这里的运行时即CLR提供自动内存管理、类型安全等功能。 托管代码是用高级语言编写的,运行在.NET之上。可以是C#、F#等。使用它们的编译器编译的代码不会生成机器代码。但是,您将得到中间语言代…

    2025年12月17日
    000

发表回复

登录后才能评论
关注微信