StringBuilder到底是是什么。我这里先不说,先说说咱们熟悉的string。
String就是我们常说的字符串类。但是string类是不可变的,据官方报道,对string类的任何改变,都会返回一个新的string类对象。也就是说,我们每次使用string类中的方法改变字符串时,就要在内存中创建一个新的字符串对象,即需要为新的字符串对象分配新的空间。当我们需要大量的修改字符串时,就会造成一大部分的内存开销,从而浪费的宝贵的内存空间。为此stringBuilder就从一定程度上解决了这样的问题,当修改字符串的时候,他不需要重新创建对象,从而提升了性能。
既然string类创建字符串使用起来非常 的方便,那么stringBuiler使用起来也不会难道哪里去。它仅仅需要一个重载一个构造函数,既可以初始化创建一个stringBuilder实例。如下:
StringBuilder strB = new StringBuilder("Howare you !");
下面来大概介绍一下我们常用的方法吧。
(一) 设置容量和长度
之所以上面说stringBuilder类在字符串改变时不会创建新的对象,是因为stringBuilder是动态分配内存的。也正是因为其是动态分配内存,所以在创建stringBuilder对象时最好为其设置好字符串容量大小。这样的话可以免去计算机计算其需要分配的内存,节省了计算时间,提高效率。
Ps:我们这里的容量和字符串的长度是有点区别的。
例如,在我们创建stringBuilder对象时,字符串“howare you !”长度是13,但是我们可以为stringBuilder创建一个25的容量。当修改后的字符串不到25时,这个对象不会重新分配空间,但是修改的字符串超过25时,其自动将空间翻倍。可以使用stringBuilder的另一个构造函数来解决。
stringBuilderstrB =new stringBuilder(”How are you !” , 25);
另外后期可以使用stringBuilder的capacity属性来修改,这里不再累述。
(二)Append 方法可用来将文本或对象的字符串表示形式添加到由当前 StringBuilder 对象表示的字符串的结尾处。以下示例将一个 StringBuilder 对象初始化为“Hello World”,然后将一些文本追加到该对象的结尾处。将根据需要自动分配空间。
StringBuilder strB = newStringBuilder("How are you !");
StrB.Append("I am fine!");
Console.WriteLine(StrB);
此示例将How are you ! I am fine! 显示在窗体上。
(三)AppendFormat 方法将文本添加到StringBuilder 的结尾处,而且实现了 IFormattable 接口,因此可接受格式化部分中描述的标准格式字符串。可以使用此方法来自定义变量的格式并将这些值追加到 StringBuilder 的后面。以下示例使用 AppendFormat 方法将一个设置为货币值格式的整数值放置到 StringBuilder 的结尾。
int MyInt = 25;
StringBuilderstrB = newStringBuilder("Your total is ");
StrB.AppendFormat("{0:C} ",MyInt);
Console.WriteLine(StrB);
此示例将 Your total is $25.00 显示在窗体上。
(四)Insert 方法将字符串或对象添加到当前 StringBuilder 中的指定位置。以下示例使用此方法将一个单词插入到 StringBuilder 的第六个位置。
StringBuilderstrB = newStringBuilder("Hello World!");
StrB.Insert(6,"Beautiful ");
Console.WriteLine(StrB);
此示例将 Hello Beautiful World! 显示在窗体上。
(五)可以使用 Remove 方法从当前 StringBuilder中移除指定数量的字符,移除过程从指定的从零开始的索引处开始。以下示例使用 Remove 方法缩短 StringBuilder。
StringBuilderstrB = newStringBuilder("Hello World!");
StrB.Remove(5,7);
Console.WriteLine(StrB);
此示例将 Hello 显示在窗体上。
(六)使用 Replace 方法,可以用另一个指定的字符来替换 StringBuilder 对象内的字符。以下示例使用 Replace 方法来搜索 StringBuilder 对象,查找所有的感叹号字符 (!),并用问号字符 (?) 来替换它们。
StringBuilder strB = newStringBuilder("Hello World!");
StrB.Replace('!', '?');
Console.WriteLine(StrB);
此示例将 Hello World? 显示在窗体上
总结:
相比之下,stringBuilder的用法和string类的用法是完全一样的。所以无需刻意去学习。