C# StringBuilder

在C#中,字符串类型是不可变的。这意味着字符串一旦创建就无法更改。例如,一个新的字符串"Hello World!"将占用堆上的内存空间。现在,通过将初始字符串更改"Hello World!"为"Hello World! from Tutorials Teacher"将在内存堆上创建一个新的字符串对象,而不是在相同的内存地址处修改原始字符串。如果通过替换,追加,删除或在原始字符串中插入新字符串多次更改原始字符串,此行为将影响性能。

字符串的内存分配

字符串对象的内存分配

为了解决此问题,C#StringBuilder在System.Text命名空间中引入。StringBuilder不在内存中创建新对象,而是动态扩展内存以容纳修改后的字符串。

StringBuilder的内存分配

StringBuilder对象的内存分配

创建一个StringBuilder对象

您可以StringBuilder使用new关键字并传递初始字符串来创建该类的对象。以下示例演示了创建StringBuilder对象。

usingSystem.Text;//引入StringBuildersb=newStringBuilder();//稍后将追加字符串//或StringBuildersb=newStringBuilder("HelloWorld!");

或者,还可以使用重载构造函数指定StringBuilder对象的最大容量,如下所示。

StringBuildersb=newStringBuilder(50);//稍后将追加字符串//或StringBuildersb=newStringBuilder("HelloWorld!",50);

以上,C#在内存堆上按顺序分配最多50个空间。一旦达到指定容量,此容量将自动加倍。还可以使用capacity或length属性设置或检索 StringBuilder 对象的容量。

您可以循环使用for循环来获取或设置指定索引处的字符。

StringBuildersb=newStringBuilder("HelloWorld!");for(inti=0;i<sb.Length;i++){Console.Write(sb[i]);//输出:HelloWorld!}

从 StringBuilder 检索字符串

StringBuilder不是字符串。使用ToString()方法从StringBuilder对象检索字符串。

StringBuildersb=newStringBuilder("HelloWorld!");vargreet=sb.ToString();//返回“HelloWorld!”"HelloWorld!"

向 StringBuilder 添加/追加字符串

使用 Append () 方法在当前 StringBuilder 对象的末尾追加字符串。如果 StringBuilder 还没有包含任何字符串,它将添加它。AppendLine ()方法在字符串的末尾附加换行符。

StringBuildersb=newStringBuilder();sb.Append("Hello");sb.AppendLine("World!");sb.AppendLine("HelloC#");Console.WriteLine(sb);
输出:
HelloWorld!HelloC#

将格式化的字符串追加到 StringBuilder

使用 AppendFormat() 方法将输入字符串格式化为指定的格式,然后追加它。

StringBuildersbAmout=newStringBuilder("您的总金额为");sbAmout.AppendFormat("{0:C}",25);Console.WriteLine(sbAmout);//输出:您的总金额为$25.00

将 String 插入 StringBuilder

使用 Insert() 方法在StringBuilder对象的指定索引处插入一个字符串。

StringBuildersb=newStringBuilder("HelloWorld!");sb.Insert(5,"C#");Console.WriteLine(sb);//输出:HelloC#World!

在StringBuilder中删除字符串

使用Remove()方法从指定的索引中删除字符串,直到指定的长度。

StringBuildersb=newStringBuilder("HelloWorld!",50);sb.Remove(6,7);Console.WriteLine(sb);//输出:你好

在StringBuilder中替换字符串

使用该Replace()方法将所有指定的字符串出现替换为指定的替换字符串。

StringBuildersb=newStringBuilder("HelloWorld!");sb.Replace("World","C#");Console.WriteLine(sb);//输出:HelloC#!
要记住的要点:
  1. StringBuilder 是可变的。

  2. StringBuilder 追加多个字符串值时,执行速度比 string 快。

  3. 当您需要追加三个或四个以上的字符串时,请使用StringBuilder。

  4. 使用Append()方法向StringBuilder对象添加或追加字符串。

  5. 使用ToString()方法从StringBuilder对象中检索字符串。

编辑于2024-05-20 13:04