C# StringBuilder类用法详解
C# 中对于创建成功的 string 字符串,它的长度是固定的,内容不能被改变和编译。虽然使用“+”可以达到附加新字符或字符串的目的,但“+”会产生一个新的 string 对象,并在内存中创建新的字符串对象。如果重复地对字符串进行修改,将会极大地增加系统开销。
C# 中提供了一个可变的字符序列 StringBuilder 类,大大提高了频繁修改字符串的效率,本节对可变字符串类的使用进行讲解。
StringBuilder 类有 6 种不同的构造方法,分别如下:
例如,创建一个 StringBuilder 对象,其初始引用的字符串为“Hello World!”,代码如下:
StringBuilder 类提供的方法都有多种使用形式,开发者可以根据需要选择合适的使用形式。
【实例】创建一个控制台应用程序,声明一个 int 类型的变量 Num,并初始化为 368;然后创建一个 StringBuilder 对象 SBuilder,其初始值为“C语言”;之后分别使用 StringBuilder 类的 Append、AppendFormat、Insert、Remove 和 Replace 方法对 StringBuilder 对象进行操作,并输出相应的结果。
string 操作示意图如下图所示。
图 1 string操作示意图
而 StringBuilder 类则不同,每次操作都是对自身对象进行操作,而不是生成新的对象,其所占空间会随着内容的增加而扩充。这样,在做大量的修改操作时,不会因生成大量匿名对象而影响系统性能。
StringBuilder 操作示意图如下图所示。
图 2 StringBuilder操作示意图
当程序中需要大量地对某个字符串进行操作时,应该考虑应用 StringBuilder 类处理该字符串,其设计目的就是针对大量 string 操作的一种改进办法,以避免产生太多的临时对象;而当程序中只是对某个字符串进行一次或几次操作时,采用 string 类即可。
C# 中提供了一个可变的字符序列 StringBuilder 类,大大提高了频繁修改字符串的效率,本节对可变字符串类的使用进行讲解。
StringBuilder类的定义
StringBuilder 类位于 System.Text 命名空间中,如果要创建 StringBuilder 对象,首先必须引用该命名空间。StringBuilder 类有 6 种不同的构造方法,分别如下:
public StringBuilder() public StringBuilder(int capacity) public StringBuilder(string value) public StringBuilder(int capacity,int maxCapacity) public StringBuilder(string value,int capacity) public StringBuilder(string value,int startIndex,int length,int capacity)其中,各个参数的含义是:
- capacity:StringBuilder 对象的建议起始大小。
- value:字符串,包含用于初始化 StringBuilder 对象的子字符串。
- maxCapacity:当前字符串可包含的最大字符数。
- startIndex:value 中子字符串开始的位置。
- length:子字符串中的字符数。
例如,创建一个 StringBuilder 对象,其初始引用的字符串为“Hello World!”,代码如下:
StringBuilder MyStringBuilder = new StringBuilder("Hello World!");StringBuilder 类表示值为可变字符序列的类似字符串的对象。之所以说值是可变的,是因为在创建它后可以通过追加、移除、替换或插入字符而对它进行修改。
StringBuilder类的使用
StringBuilder 类中的常用方法及说明如下表所示。方 法 | 说 明 |
---|---|
Append | 将文本或字符串追加到指定对象的末尾 |
AppendFormat | 自定义变量的格式并将这些值追加到 StringBuilder 对象的末尾 |
Insert | 将字符串或对象添加到当前 StringBuilder 对象中的指定位置 |
Remove | 从当前 StringBuilder 对象中移除指定数量的字符 |
Replace | 用另一个指定的字符来替换 StringBuilder 对象内的字符 |
StringBuilder 类提供的方法都有多种使用形式,开发者可以根据需要选择合适的使用形式。
【实例】创建一个控制台应用程序,声明一个 int 类型的变量 Num,并初始化为 368;然后创建一个 StringBuilder 对象 SBuilder,其初始值为“C语言”;之后分别使用 StringBuilder 类的 Append、AppendFormat、Insert、Remove 和 Replace 方法对 StringBuilder 对象进行操作,并输出相应的结果。
static void Main(string[] args) { int Num = 666; //声明一个int类型变量Num并初始化为368 //实例化一个StringBuilder类,并初始化为"明日科技" StringBuilder SBuilder = new StringBuilder("C语言"); //使用Append方法将字符串追加到SBuilder的末尾 SBuilder.Append("中文网"); Console.WriteLine(SBuilder); //输出SBuilder //使用AppendFormat方法将字符串按照指定的格式追加到SBuilder的末尾 SBuilder.AppendFormat("{0:C0}", Num); Console.WriteLine(SBuilder); //输出SBuilder //使用Insert方法将"网站:"追加到SBuilder的开头 SBuilder.Insert(0, "网站:"); Console.WriteLine(SBuilder); //输出SBuilder //使用Remove方法从SBuilder中删除索引为14处后的字符串 SBuilder.Remove(14, SBuilder.Length - 14); Console.WriteLine(SBuilder); //输出SBuilder //使用Replace方法将"网站:"替换成"编程入门:" SBuilder.Replace("网站:", "编程入门:"); Console.WriteLine(SBuilder); //输出SBuilder Console.ReadLine(); }运行结果为:
C语言中文网
C语言中文网666
网站:C语言中文网666
网站:C语言中文网
编程入门:C语言中文网
StringBuilder与string的区别
string 本身是不可改变的,它只能赋值一次,每一次内容发生改变都会生成一个新的对象,然后原有的对象引用新的对象,而每一次生成新对象都会对系统性能产生影响,这会降低 .NET 编译器的工作效率。string 操作示意图如下图所示。
图 1 string操作示意图
而 StringBuilder 类则不同,每次操作都是对自身对象进行操作,而不是生成新的对象,其所占空间会随着内容的增加而扩充。这样,在做大量的修改操作时,不会因生成大量匿名对象而影响系统性能。
StringBuilder 操作示意图如下图所示。
图 2 StringBuilder操作示意图
当程序中需要大量地对某个字符串进行操作时,应该考虑应用 StringBuilder 类处理该字符串,其设计目的就是针对大量 string 操作的一种改进办法,以避免产生太多的临时对象;而当程序中只是对某个字符串进行一次或几次操作时,采用 string 类即可。