StringBuilder
您可能已经注意到,String 中的许多方法都会创建并返回新字符串。如您所料,分配和废弃大量字符串代价是很高的。
通常,如果您要对特定的字符串执行一个需要创建新字符串的字符串操作,可以放心使用 String 中的相应方法(或适当的 Visual Basic .NET 函数)。但是,如果您要执行多个这种操作,而且 System.Text.Stringbuilder 中提供了所需的操作,则应根据您的字符串创建一个 StringBuilder,然后在该 StringBuilder 上执行多个操作,最后在 StringBuilder 上调用 ToString 以返回结果字符串。请参阅前面的示例,在该示例中,所有操作都在一行中完成。
通常的做法是在 StringBuilder 中生成一个字符串,对其进行操作,然后再将其转换成字符串。请注意,调用 ToString 并不会真正复制字符串,除非您以后又修改了同一个 StringBuilder 对象,所以它的效率是很高的,使用 StringBuilder 的系统开销只是一个复制操作,而不是两个。这就是我们为什么使用一个操作规则的原因。对于两个或多个操作,使用 StringBuilder 至少能够获得同样的效果。
如果可用重载比 String 中更有限的重载更易使用,您也可以使用 StringBuilder。
要使用 StringBuilder,您需要在程序文件的开始处包括 using System.Text;
(在 Visual Basic 中是 Imports System.Text
)。
StringBuilder 具有多个构造函数,可以从字符串初始化对象并设置其容量和最大容量。(默认的最大容量约为 20 亿个字符,所以,尽管设置较大的值也不会出问题,但设置较小的值还是比较合理的。)对象的容量可以根据需要调高,只要不超过最大容量即可。构造 StringBuilder 之后,就不能再调整其最大容量。
共有以下四个属性:Capacity(可读写)、MaxCapacity(只读)、Length(字符串的当前长度,可以设置得更短或更长)和 Chars(索引生成器,用于读写单个字符)。如果容量不够大,可以使用 EnsureCapacity 方法增加容量。
使用 Append 方法,可以将字符串或任意类型(包括许多重载)附加到 StringBuilder 末尾。如果传递其他类型,将调用其 ToString 方法,并将结果附加到 StringBuilder。
使用 AppendFormat 方法,可以格式化附加到 StringBuilder 的字符串。其格式化方法与 String.Format 和 Console.WriteLine 相同。
使用 Insert 的许多重载,您都可以在 StringBuilder 中的任意位置插入字符串(可能通过调用参数的 ToString 方法计算得出)。
使用 Remove,可以删除从任意位置开始任意数量的字符。
使用 Replace,可以替换单个字符,或者如前文所述替换子字符串。
最后,使用 ToString 的重载,可以根据 StringBuilder(或其指定的子字符串)创建并返回新的 String 对象。