在C#中,字符串类型是不可变的。这意味着字符串一旦创建就无法更改。例如,一个新的字符串"HelloWorld!"将占用堆上的内存空间。现在,通过将初始字符串更改"HelloWorld!“为"Hello World! I like C#” 将在内存堆上创建一个新的字符串对象,而不是在相同的内存地址处修改原始字符串。如果通过替换,追加,删除或在原始字符串中插入新字符串多次更改原始字符串,此行为将影响性能。

为了解决此问题,C#StringBuilder在System.Text命名空间中引入。StringBuilder不在内存中创建新对象,而是动态扩展内存以容纳修改后的字符串。

1. 创建一个StringBuilder对象

可以StringBuilder使用new关键字并传递初始字符串来创建该类的对象。

StringBuilder sb = new StringBuilder();

或者

StringBuilder sb = new StringBuilder(“Hello World!”);

或者,还可以使用重载构造函数指定StringBuilder对象的最大容量

StringBuilder sb = new StringBuilder(100);

StringBuilder sb = new StringBuilder(“Hello World!”, 100);

以上,C#在内存堆上按顺序分配最多100个空间。一旦达到指定容量,此容量将自动加倍。还可以使用capacity或length属性设置或检索 StringBuilder 对象的容量。您可以循环使用for循环来获取或设置指定索引处的字符。

从上图可以看出,设置容量100,实际长度12,最大容量217483647.

2. 从 StringBuilder 检索字符串

StringBuilder不是字符串。使用ToString()方法从StringBuilder对象检索字符串。

检索的是实际长度的字符串:

for (int i = 0; i < sb.Length; i++)

{

Console.Write(sb[i]);

}

3. 向StringBuilder 添加/追加字符串

使用 Append () 方法在当前 StringBuilder 对象的末尾追加字符串。如果 StringBuilder 还没有包含任何字符串,它将添加它。AppendLine ()方法在字符串的末尾附加换行符。

sb.Append(“C#”);

sb.AppendLine(“Python”);

sb.AppendLine(“Java”);

Console.WriteLine(sb.ToString());

输出:

Hello World!C#Python

Java

4.将格式化的字符串追加到StringBuilder

使用 AppendFormat() 方法将输入字符串格式化为指定的格式,然后追加它。

StringBuilder sb = new StringBuilder();

sb.AppendFormat($“总价:{100:C}”);

Console.WriteLine(sb.ToString());

输出: 总价:¥100.00

5. 将 String 插入StringBuilder

使用 Insert() 方法在StringBuilder对象的指定索引处插入一个字符串。

StringBuilder sb= new StringBuilder(“Language”);

sb.Append(" List:\n");

Console.WriteLine(sb.Length);

sb.AppendLine(“C”);

sb.AppendLine(“C#”);

sb.AppendLine(“Java”);

sb.Insert(15, “Python\n”);

Console.WriteLine(sb.ToString());

输出:

15

Language List:

Python

C

C#

Java

6.在StringBuilder中删除字符串

StringBuilder sb = new StringBuilder(“Language”);

sb.Append(" List:\n");

sb.AppendLine(“C#”);

Console.WriteLine(sb.ToString());

sb.Remove(16, 1);

Console.WriteLine(sb.ToString());

输出:

Language List:

C#

Language List:

C

7.在StringBuilder中替换字符串

使用该Replace()方法将所有指定的字符串出现替换为指定的替换字符串。

StringBuilder sb = new StringBuilder(“Language”);

Console.WriteLine(sb.ToString());

sb.Replace(“Language”, “Program Language”);

Console.WriteLine(sb.ToString());

输出:

Language

Program Language

C# StringBuilder 使用相关推荐

  1. String、StringBuffer与StringBuilder之间区别 (转载)

    最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,StringBuilder的东西,现在整理一下. 关于这三个类在字符串处理中的位置不言而喻,那 ...

  2. String、StringBuffer、StringBuilder的理解

    问题: 理解 Java的字符串,String.StringBuffer.StringBuilder 有什么区别? 知识点 字符串设计和实现考量 String是Immutable(线程安全.字符串常量池 ...

  3. String、StringBuilder、StringBuffer的比较

    最近学习中又遇到了StringBuilder,突然就联想到StringBuffeer和String.于是翻翻笔记还在.那么他们有什么区别? 1.StringBuilder与StringBuffer S ...

  4. StringBuilder、StringBuffer、String区别

    相信大家对 String 和 StringBuffer 的区别也已经很了解了,但是估计还是会有很多同志对这两个类的工作原理有些不清楚的地方,今天重新把这个概念给大家复习一下,顺便牵出 J2SE5.0 ...

  5. 字符串拼接还在用StringBuilder?快试试Java8中的StringJoiner吧,真香!

    点击关注公众号,Java干货及时送达 前言 之前,我们经常会通过StringBuffer或者StingBuilder对字符串进行拼接,但是你知道Java8中推出的StringJoiner吗?它比前者更 ...

  6. 面试官问我 StringBuilder 线程不安全的点在哪儿.....

    点击关注公众号,Java干货及时送达 来源:cnblogs.com/keatsCoder/p/13212289.html 引言 面试官: StringBuilder和StringBuffer的区别在哪 ...

  7. String、StringBuffer、StringBuilder源码解析

    2019独角兽企业重金招聘Python工程师标准>>> String:如果短字符拼接的话效率是最高的,例如 String a="a"+"b"+ ...

  8. Java中String、StringBuffer和StringBuilder的区别

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6581009.html  在编程中,对于字符串拼接,我们可以用String类重载的+或concat(str).S ...

  9. 测试一下StringBuffer和StringBuilder及字面常量拼接三种字符串的效率

    之前一篇里写过字符串常用类的三种方式<java中的字符串相关知识整理>,只不过这个只是分析并不知道他们之间会有多大的区别,或者所谓的StringBuffer能提升多少拼接效率呢?为此写个简 ...

  10. 在PHP中实现StringBuilder类

    在PHP中实现StringBuilder类 在asp.net开发开发环境中,有一个StringBuilder类是比较常用的, 这个类用起来可以实现很方便的text文本的操作. 但是在php中,没有这个 ...

最新文章

  1. Java反射(详述版)
  2. 2019.1.7 区块链论文翻译
  3. Java判断工作日计算,计算随意2个日期内的工作日
  4. FinanceJson
  5. 一个命令kill所有符合条件的进程
  6. dnn神经网络_机器学习-浅谈神经网络和Keras的应用
  7. 程序员求职面试三部曲之二:提高面试的成功率
  8. 描写计算机老师上课的神态,请你用一段话描写一位老师上课的情景,注意抓住神态语言动作等细节...
  9. 计算机网络(第七版)谢希仁
  10. C语言实现去掉字符串中重复的字符
  11. asp中的session使用方法详解
  12. NLP常见语言模型总结
  13. css之calc,CSS之calc()
  14. Ubuntu解决键盘错乱与图形化切换
  15. Muli3D 8 计算Shader中顶点属性相对于屏幕坐标的偏导数
  16. python中的socketserver模块与多线程
  17. 十大经典排序算法及比较与分析 ( 动画演示 ) ( 可视化工具 )
  18. 包装成悲伤消费的骗局正在收割午夜的年轻人
  19. Central Europe Regional Contest 2019 J. Saba1000kg (并查集+根号讨论)
  20. 读者言论经典 [ 光影人像 东海陈光剑 的博客 ]

热门文章

  1. 利用键盘快速打开应用程序
  2. 【公告】关于开启用户注册及登录手机短信验证的通知
  3. php的单引号和双引号的问题
  4. 10个最受欢迎的wordpress多用创意途主题
  5. android 4.0和6.0区别,华为自曝全新EMUI 4.0 基于Android 6.0Mate 8首发
  6. 【云栖风向标】VOL.3:阿里云:对不起,这个官司我不服!
  7. 固定资产有收入的报废、无收入的报废 的冲销
  8. html中设置table的各个td的宽度方法:
  9. 清朝历代皇帝 庙号、谥号、姓名、生卒年、在位时间、年号
  10. android toast乱码