C#-可变字符串StringBuilder类与String类

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();

运行效果:
运行效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张钧泽林

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值