StringBuilder概述
对于创建成功的字符串对象,其长度是固定的,内容不能被改变和编译。
虽然使用“+”可达到附加的目的,但会产生一个新的String实例,在内存中创建新的字符串对象,如果重复的进行修改,将极大的增加系统开销。
StringBuilder可变字符串则是为了解决这一问题。
1、定义
StringBuilder类有6种不同的构造方法,最常用的如下:
public StringBuilder(string value,int cap)
value:StringBuilder对象引用的字符串;
cap:设定StringBuilder对象的初始大小(容量上限)
例如:
StringBuilder myStringBuilder = new StringBuilder("Hello World");
StringBuilder类会通过追加、移除、替换或插入字符而创建它后可以对它进行修改。
2、使用
StringBuilder类存在于System.Text命名空间中,如果要创建StringBuilder对象,首先必须引用此命名空间。StringBuilder类中常用的方法如下:
方法 | 说明 |
---|---|
Append | 将文本或字符串追加到指定对象的末尾 |
AppendFormat | 自定义变量的格式并将这些值追加到StringBuilder对象的末尾 |
Insert | 将字符串或对象添加到当前StringBuilder对象的指定位置 |
Remove | 从当前StringBuilder对象中移除指定数量的字符 |
Replace | 用另一个指定的字符来替换StringBuilder对象内的字符 |
int num = 1000;
StringBuilder str = new StringBuilder("荣耀自称科技标杆");
//追加
str.Append("vs 小米死磕高性价比");
Console.WriteLine($"追加后的字符串:{str}");
Console.WriteLine();
//格式化追加
str.AppendFormat("{0:C}", num);
Console.WriteLine($"格式化追加后的字符串:{str}");
Console.WriteLine();
//添加
str.Insert(0, "PK:");
Console.WriteLine($"添加后的字符串:{str}");
Console.WriteLine();
//移除
str.Remove(str.Length - 9, 9);
Console.WriteLine($"移除后的字符串:{str}");
Console.WriteLine();
//替换
str.Replace("PK", "相爱相杀");
Console.WriteLine($"替换后的字符串:{str}");
Console.WriteLine();
Console.ReadLine();
运行结果:
StringBuilder类与String类的区别
String对象是不可改变的,每次使用String类中的方法时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。
如果字符串需要执行重复修改的情况下,可能相关的系统开销会比较庞大;在只修改字符串内容的情况下,使用StringBuilder类的执行效率会更高。
验证:
string str = "";
//定义字符串执行操作的起始时间
long startTime = DateTime.Now.Millisecond;
for (int i = 0; i < 10000; i++)
{
str += i;
}
long endTime = DateTime.Now.Millisecond;
long time = endTime - startTime;
Console.WriteLine($"String类执行操作时间:{time}");
StringBuilder str2 = new StringBuilder("");
long startTime2 = DateTime.Now.Millisecond;
for (int i = 0; i < 10000; i++)
{
str2.Append(i);
}
long endTime2 = DateTime.Now.Millisecond;
long time2 = endTime2 - startTime2;
Console.WriteLine($"StringBuilder类执行操作时间:{time2}");
Console.ReadLine();
运行效果: