前言

在日常的开发中StringBuilder大家肯定都有用过,甚至用的很多。毕竟大家都知道一个不成文的规范,当需要高频的大量的构建字符串的时候StringBuilder的性能是要高于直接对字符串进行拼接的,因为直接使用++=都会产生一个新的String实例,因为String对象是不可变的对象,这也就意味着每次对字符串内容进行操作的时候都会产生一个新的字符串实例,这对大量的进行字符串拼接的场景是非常不友好的。因此StringBuilder孕育而出。这里需要注意的是,这并不意味着可以用StringBuilder来代替所有字符串拼接的的场景,这里我们强调一下是频繁的对同一个字符串对象进行拼接的操作。今天我们就来看一下c#中StringBuilder的巧妙实现方式,体会一下底层类库解决问题的方式。

需要注意的是,这里的不可变指的是字符串对象本身的内容是不可改变的,但是字符串变量的引用是可以改变的。

简单示例

接下来咱们就来简单的示例一下操作,其实核心操作主要是Append方法ToString方法,源码的的角度上来说还有StringBuilder的构造函数。首先是大家最常用的方式,直接各种Append然后最后得到结果。

StringBuilder builder = new StringBuilder();
builder.Append("我和我的祖国");
builder.Append(',');
builder.Append("一刻也不能分割");
builder.Append('。');
builder.Append("无论我走到哪里,都留下一首赞歌。");
builder.Append("我歌唱每一座高山,我歌唱每一条河。");
builder.Append("袅袅炊烟,小小村落,路上一道辙。");
builder.Append("我永远紧依着你的心窝,你用你那母亲的脉搏,和我诉说。");
string result = builder.ToString();
Console.WriteLine(result);

StringBuilder也是支持通过构造函数初始化一些数据的,有没有在构造函数传递初始化数据,也就意味着不同的初始化逻辑。比如以下操作

StringBuilder builder = new StringBuilder("我和我的祖国");
//或者是指定StringBuilder的容量,这样的话StringBuilder初始可承载字符串的长度是16
builder = new StringBuilder(16);

因为StringBuilder是基础类库,因此看着很简单,用起来也很简单,而且大家也都经常使用这些操作。

源码探究

上面咱们简单的演示了StringBuilder的使用方式,一般的类似的StringBuilder或者是List这种虽然我没使用的过程中可以不关注容器本身的长度一直去添加元素,实际上这些容器的本身内部实现逻辑都包含了一些扩容相关的逻辑。上面咱们提到了一下StringBuilder的核心主要是三个操作,也就是通过这三个功能可以呈现出StringBuilder的工作方式和原理。

•一个是构造函数,因为构造函数包含了初始化的一些逻辑。•其次是Append方法,这是StringBuilder进行字符串拼接的核心操作。•最后是将StringBuilder转换成字符串的操作ToString方法,这是我们得到拼接字符串的操作。

接下来咱们就从这三个相关的方法入手来看一下StringBuilder的核心实现,这里我参考的.net版本为v6.0.2

构造入手

我们上面提到了StringBuilder的构造函数代表了初始化逻辑,大概来看就是默认的构造函数,即默认初始化逻辑和自定义一部分构造函数的逻辑,主要是的逻辑是决定了StringBuilder容器可容纳字符串的长度。

无参构造

首先来看一下默认的无参构造函数的实现[点击查看源码

浅谈C#字符串构建利器StringBuilder相关推荐

  1. PHP字符串转数字面试,浅谈php字符串反转 面试中经常遇到的问题

    下面小编就为大家分享一篇浅谈php字符串反转 面试中经常遇到的问题,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 1.单字节字符串反转 php提供了用于字符串反转的函数strrev( ...

  2. java 字符串转list_浅谈java 字符串,字符数组,list间的转化

    1.关于java.lang.string.split xxx.split()方法可以将一个字符串分割为子字符串,然后将结果作为字符串数组返回. 2.字符串转字符数组 String str =" ...

  3. 浅谈前端自动化构建 -- Grunt、Gulp、FIS

    前言 笔记来源:拉勾教育 大前端高薪训练营 阅读建议:内容较多,建议通过左侧导航栏进行阅读 前端自动化构建 基本介绍 一切重复工作本应自动化.将开发中的源代码,自动化的转换成生产环境中可以运行的程序, ...

  4. 浅谈 Java 字符串(String, StringBuffer, StringBuilder)

    我们先要记住三者的特征: String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全) 一.定义 查看 API 会发现,String ...

  5. python字符串操作_浅谈Python 字符串特有的操作方法

    来源:(微信号:python_cat)" 正如<你真的知道Python的字符串是什么吗?>所写,Python中字符串是由Uniocde编码的字符组成的不可变序列,它具备与其它序列 ...

  6. 实战录 | 浅谈前端项目构建与优化

    <实战录>导语 云端卫士的新栏目<实战录>将会定期分享一些我们的工程师伙伴们在产品研发的过程中总结的实践经验,希望对于热爱技术且关注安全领域的受众有所裨益.本期分享人为云端卫士 ...

  7. 浅谈基于知识图谱构建智能问答系统

    "人才引进落户政策""企业法人变更登记""如何办理公积金贷款"--在智慧政务业务中,智能客服能够7*24小时响应群众.企业关于日常事务办理. ...

  8. join方法 js 单字符串会报错_浅谈JavaScript字符串拼接

    在JavaScript中会经常遇到字符串拼接,但是如果要拼接的字符串过长就比较麻烦了. 如果在一行的话,可读性太差:如果换行的话,会直接报错. 现在就来介绍几个JavaScript拼接字符串的几个小技 ...

  9. 浅谈将一个字符串转换为整数

    前一段时间刷到"把一个字符串转换为整数"这道题.据说是微软面试开发工程师最常用到的一个问题.写出了最终版本之后,竟然花费了大量的时间,这让我感到自己考虑问题还不是那么全面.所以,以 ...

最新文章

  1. ATS 5.3.0缓存架构
  2. .net程序员转战android第三篇---登录模块之静态登录
  3. listview 打开文件 c#_.NET CORE(C#) WPF简单菜单MVVM绑定
  4. 解决windows图片查看器背景色变成米黄色
  5. python退出程序-python怎么终止程序
  6. 【线段树】Frog Traveler(CF751D)
  7. cuda安装配置VS2013
  8. brew 安装mysql5.6_MacOS 10.14安装和brew更新后无法安装mysql gem
  9. 8 一点就消失_消失的莉莉安(25)
  10. tableview cell自适应撑高
  11. 高级 Vue 组件模式 (6)
  12. Exp5 MSF基础应用
  13. 使用4G模块(EC200T)发送UDP数据到内网PC端(内网穿透)
  14. SQL 注入漏洞(二)之 mysql 注入的相关知识
  15. 面包板入门电子制作 学习笔记6
  16. iOS9.x-10.x可以实现永久越狱啦
  17. 文件10:文件路径-信息查询方法
  18. 二进制中正负数表示和判断
  19. ChromeDriver与Chrome版本对应关系
  20. Mac电脑app store登录不了的问题

热门文章

  1. 旅游社交网站 游范儿
  2. 被娱乐在线报道的“唐骏造假门事件”
  3. SBO中的manager用户已锁定
  4. python qq模块_常用的Python模块
  5. 本周ASP.NET英文技术文章推荐[09/30- 07/13]:.NET Framework、JSON、Google Analytics、文件上传、GridView、IIS 7、Web开发...
  6. 第8章 java中的并发工具类
  7. 自动调试自动编译五分钟上手
  8. SpringMVC4零配置--web.xml
  9. 方法调用(车票练习)
  10. 在线自动下载最新版本jquery