CS3L25——StringBuilder

本章代码关键字

1
2
3
4
5
6
7
8
9
10
stringBuilder.Capacity            //获取当前 StringBulider 的容量
StringBulider.Length //获取当前 StringBulider 的字符串长度
stringBuilder.Append() //追加字符串
stringBuilder.AppendFormat() //以格式化方式追加字符串
stringBuilder.Insert() //在指定位置插入字符串
stringBuilder.Remove() //从指定位置后移除指定数量的字符串
stringBuilder.Clear() //清空所有内容
stringBuilder[] //通过索引器查找字符或者修改字符
stringBuilder.Replace() //将特定字符替换为其他字符
StringBuilder.Equals() //判断StringBuilder传入的字符串内容是否想的

StringBuilder

string​ 是特殊的引用类型,每次重新赋值或者拼接时会分配新的内存空间
如果一个字符串经常改变会非常浪费空间,同时也会频繁触发GC,性能消耗大

StringBuilder​ 是 C# 提供的一个用于处理字符串的公共类

主要解决的问题是:修改字符串而不创建新的对象,需要频繁修改和拼接的字符串可以使用它,可以提升性能

使用前,需要引用命名空间 System.Text

初始化直接指明字符串内容

1
2
StringBuilder str = new StringBuilder("123123123");
Console.WriteLine(str);

输出:

1
123123123

容量

因为 StringBuilder​ 本质是一个字符数组
因此 StringBuilder​ 存在一个容量的问题 每次往里面添加时 会自动扩容
扩容会准备冗余的内存空间,减少重新分配内存空间的次数,提高性能

stringBuilder.Capacity​ 可以获取当前 StringBulider​ 的容量
stringBuilder.Length​ 可以获取当前 StringBulider​ 的字符串长度

1
2
3
4
//获取当前StringBulider的容量
Console.WriteLine(str.Capacity); //一开始是16,如果扩容一次就会增加一倍容量
//获得字符长度
Console.WriteLine(str.Length);

输出:

1
2
16
9

在初始化时直接指定容量

可以主动规定容量大小,在构造函数的第二个参数写入

1
2
StringBuilder str2 = new StringBuilder("4444", 32);
Console.WriteLine(str2.Capacity); //获取当前StringBulider的容量

输出:

1
32

增删查改替换

增加

可以直接使用 Append()​ 追加,也可以使用格式化形式 AppendFormat()​ 追加

1
2
3
4
5
6
7
8
9
10
11
StringBuilder str = new StringBuilder("123123123");

str.Append("4444");
Console.WriteLine(str);
Console.WriteLine(str.Capacity);
Console.WriteLine(str.Length);
//最开始是16容量,如果扩容一次就会增加一倍容量
str.AppendFormat("{0}{1}", 100, 999);
Console.WriteLine(str);
Console.WriteLine(str.Capacity);
Console.WriteLine(str.Length);

输出:

1
2
3
4
5
6
1231231234444
16
13
1231231234444100999
32
19

插入

Insert(要插入的下标位置, 要插入的字符串)​,在指定位置插入指定字符串

1
2
3
4
5
StringBuilder str = new StringBuilder("1231231234444100999");
str.Insert(0, "Mr");
Console.WriteLine(str);
Console.WriteLine(str.Capacity);
Console.WriteLine(str.Length);

输出:

1
2
3
Mr1231231234444100999
34
21

删除

Remove(删除起点的下标位置, 要删除多少个字符串)​,从指定位置后移除指定数量的字符串

1
2
3
4
5
StringBuilder str = new StringBuilder("Mr1231231234444100999");
str.Remove(0, 10);
Console.WriteLine(str);
Console.WriteLine(str.Capacity);
Console.WriteLine(str.Length);

输出:

1
2
3
34444100999
24
11

清空

清除 StringBuilder​ 所有内容

1
2
3
StringBuilder str = new StringBuilder("34444100999");
str.Clear();
Console.WriteLine(str);

输出:

1
2
3
4
5
6
7
8
9
```

### 查找

直接通过索引器查找即可

```c#
StringBuilder str = new StringBuilder("MrTang");
Console.WriteLine(str[0]);

输出:

1
M

修改

直接通过索引器修改即可

1
2
3
StringBuilder str = new StringBuilder("MrTang");
str[0] = 'L';
Console.WriteLine(str);

输出:

1
LrTang

替换

1
2
3
StringBuilder str = new StringBuilder("LrTang");
str.Replace("Lr", "mr");
Console.WriteLine(str);

输出:

1
mrTang

判断相等

使用 Equals()​ 即可判断 StringBuilder​ 和另一个字符串是否相等

1
2
3
4
5
StringBuilder str = new StringBuilder("1234567890");
if (str.Equals("1234567890"))
{
Console.WriteLine("相等");
}

输出:

1
相等