由于String是特殊的引用,每次对String类型的变量进行赋值或者拼接的时候会重新分配内存空间,所以说某些字符串经常修改的话会非常的浪费空间,而垃圾越多则会导致内存提前进行垃圾回收,这是String使用时候的缺点,而StringBuilder可以弥补这些缺点
StringBuilder是C#提供的一个用于处理字符串的公共类,主要用来解决的问题便如上所述,可以修改字符串而不创建新对象,可以提升一定的性能,减少卡顿(因为减少了垃圾,从而减少了内存进行垃圾回收的频率)
注意:使用StringBuilder的时候需要引用System.Text
StringBuilder的用法跟String不一样,String 可以直接使用 String str = “我是大好人”; 而StringBuilder 则必须要使用以下语法
StringBuilder str = new StringBuilder("我是大好人");
StringBuilder有容量的概念,每次往里面增加的时候会自动扩容,我们对数组进行增删操作的时候,是我们新建一个新的数组,把我们以前的数组挪到新的数组里面去。
而StringBuilder容量的概念,则可以让我们对字符数组操作的时候不用搬家,也就是减少了系统垃圾,容量的默认大小是16,如果新增的字符不超过16,则不会产生垃圾,如果超过16则会产生垃圾,每次触发自动扩容会自动乘2。
如何获取他的容量
int cap =str.Capacity;
Console.WriteLine(cap);
自带对StringBuilder函数的重载,在声明Stringbuilder的时候可以指定容量
StringBuilder str2 = new StringBuilder("哈哈哈哈哈哈我活啦", 100);
如上可指定容量为100
如何获取长度
int len = str2.Length;
注意,该长度为实际字符串的长度,跟容量不一样
增加
对于String类型的数据,我们进行增加操作的时候常用的是
String str3 = "123456";
str3 += "789";
而对于StringBuilder则不能使用该方法,应该使用Append()方法,或者AppendFormat()方法,即
Append()
str.Append("123123");
AppendFormat()
string eg = "88888";
str.AppendFormat("{0}{1}",666,eg);
删
下面是从第0个开始删除,删除4个
str.Remove(0,4);
改
str[3] = 'a';
查
Console.WriteLine(str[0] + str[2]);
Console.WriteLine(str);
插入
insert 中 第一个3表示插入的位置,后面的值为插入的值
str.Insert(3, "插入的字符");
替换
str.Replace("12","一二"); //将12替换为一二
清空
str.Clear();
重新赋值
注意
先clear()清空,后Append()添加
str.Clear();
str.Append("嘻嘻嘻嘻嘻");
判断相等
注意,不可以用 == 判断相等,需要用Equals(),括号内同样可传另一个StringBuilder对象
if (str.Equals("aaa")) {
Console.WriteLine("相等");
}else
{
Console.WriteLine("不相等");
}
最后是运行结果,可以比对以上代码观看