C# StringBuilder

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

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

创建一个StrinbBuilder对象

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

using System.Text; // 引用命名空间,放在代码的最上面
            
StringBuilder sb = new StringBuilder(); // 创建好之后用 sb.Append来加入新的字符串
//or
StringBuilder sb = new StringBuilder("Hello World!");

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

StringBuilder sb = new StringBuilder(50); 
//or
StringBuilder sb = new StringBuilder("Hello World!", 50);

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

循环

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

StringBuilder sb = new StringBuilder("Hello World!");

for(int i = 0; i < sb.Length; i++)
    Console.Write(sb[i]); // 输出: Hello World!

得到StringBuilder里总的字符串

StringBuilder 不是字符串。 使用 ToString() 方法可以从 StringBuilder 对象中获取完整的字符串。

StringBuilder sb = new StringBuilder("Hello World!");

var greet = sb.ToString(); //returns "Hello World!"

添加或者附加字符串到StringBuilder里面

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

StringBuilder sb = new StringBuilder();
sb.Append("Hello ");
sb.AppendLine("World!");
sb.AppendLine("Hello C#");
Console.WriteLine(sb);
//输出
// Hello World!
// Hello C#.

将格式化字符串附加到 StringBuilder

使用 AppendFormat() 方法将输入字符串格式化为指定格式并附加它。

StringBuilder sbAmout = new StringBuilder("Your total amount is ");
sbAmout.AppendFormat("{0:C} ", 25);

Console.WriteLine(sbAmout);
//输出: Your total amount is $ 25.00

将字符串插入 StringBuilder

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

StringBuilder sb = new StringBuilder("Hello World!");
sb.Insert(5," C#"); 

Console.WriteLine(sb); //输出: Hello C# World!

从StringBuilder移掉字符串

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

StringBuilder sb = new StringBuilder("Hello World!",50);
sb.Remove(6, 7);

Console.WriteLine(sb); //输出: Hello

替换字符串

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

StringBuilder sb = new StringBuilder("Hello World!",50);
sb.Remove(6, 7);

Console.WriteLine(sb); //输出: Hello

要记住的要点:

  • StringBuilder 是可变的。
  • 在附加多个字符串值时,StringBuilder 的执行速度比字符串快。
  • 当您需要附加三个或四个以上的字符串时,请使用 StringBuilder。
  • 使用 Append() 方法向 StringBuilder 对象添加或追加字符串。
  • 使用 ToString() 方法从 StringBuilder 对象中检索字符串。
上一篇:C# 枚举 enum
下一篇:C# 匿名类型
最近更新的
...