首页 > 编程语言 >C#中的字符拼接技巧

C#中的字符拼接技巧

时间:2022-12-01 11:48:21浏览次数:41  
标签:字符 string C# StringBuilder 拼接 str 字符串 Hello

谈一谈字符串的拼接

字符串是我们编程中最常使用的引用类型。String它是一个sealed类,存储在内存堆当中,每次更改将会产生一个新的string来存储,原来的就会被回收。

字符串拼接操作有多种方法,都能达到我们想要的拼接效果。但是它们的还是存在一定的差异,特别是性能方面。

1、使用"+"来拼接

string str ="Hello";//分配一块内存存储Hello

str = str +" my friend!";//重新分配一块内存来存储 Hello my friend!

此方法可以看出拼接都会产生两次内存地址,随着拼接字符串的个数地址,分配内存地址的次数也递增,当几个简单的字符串通过该方式拼接时,其实我们还是感觉不到性能的影响,但是当字符串数量大时,你都会有感觉了,那样不仅仅造成内存的浪费,还直接影响性能。

string str1 = "Hello";//分配一块内存存储Hello

string str2 = "my friend!";//分配一块内存存储my friend!

string str3 = str1 + str3;//分配一块内存存储Hello my friend!

以上代码可以看出来 会产生 3个对象,这种方法消耗的内存更多。

对于少量的字符串拼接 "+" 还比较直观方便而且不会产生性能问题。但是大量拼接就不能使用。

2、使用StringBuilder来拼接

StringBuilder其实内部相当于是维护的一个字符数组,是一个可以动态增加自身数据长度,其默认长度为16,当存储的字符串超出其长度是,会自动扩容2倍长度。

可以看出来自动扩容是会损耗性能的,建议初始化时对其进行大小估计。

StringBuilder str = new StringBuilder(2);

str.Append("Hello");

str.Append(" my friend!");

string result = str.ToString();

3、使用String.Format来拼接

其底层本质还是StringBuilder来实现。

public static String Format(IFormatProvider provider, String format, params Object[] args)
{

    if (format == null || args == null)

      throw new ArgumentNullException((format==null)?"format":"args");

    StringBuilder sb = new StringBuilder(format.Length + args.Length * 8);

    sb.AppendFormat(provider,format,args);

    return sb.ToString();

}

4、使用$进行拼接

"$"是在C#6.0出现的一个新特性,其作用相当于对String.Format()的简化,在使用String.Format来拼接时多起来的时候会眼花缭乱,$很好地解决这个痛点,让代码更加直观。

string str = "Hello";
str = $"{str} my friend!";

在性能方面 我们对比 “+” 和StringBuilder会发现 在少量字符串拼接是没有差异的。

在大量字符串拼接的时候StringBuilder的优势就很明显了。

在编程过程中要注意我们的代码对性能的影响。

 

标签:字符,string,C#,StringBuilder,拼接,str,字符串,Hello
From: https://www.cnblogs.com/fskong/p/16940917.html

相关文章

  • springmvc工作流程
    springmvc工作原理图精简版:springmvc工作流程1、用户向服务端发送一次请求,这个请求会先到前端控制器DispatcherServlet(也叫中央控制器)。2、DispatcherServlet接收......
  • BigDecimal
    Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数,但在实际应用中,可能需要对更大或者更小的......
  • react中setState为什么设计成异步更新
    1.可以显著提升性能:因为每次调用setState进行更新,都会调用render函数,导致界面也会频繁更新,因此最好是获取到多个更新后,再进行批量更新。2.可以使state和props保持同步......
  • css 设置滚动条样式
    /*设置滚动条样式*/div::-webkit-scrollbar{width:4px;}div::-webkit-scrollbar-thumb{border-radius:10px;-webkit-......
  • VB程序在引用部件mscomctl.ocx时提示不能加载,引用失败的解决办法
    一、解决方法一1.将对应版本的MSCOMCTL.OCX文件复制到“X:Windowssystem32”(X代表您系统所在目录盘符,如:C:Windowssystem32)目录下。2.在开始菜单中找到“运行(R)......
  • EMQX Enterprise 4.4.11 发布:CRL/OCSP Stapling、Google Cloud Pub/Sub 集成、预定义
    我们很高兴地告诉大家,​​EMQXEnterprise​​4.4.11版本正式发布!在此版本中,我们发布了CRL与OCSPStapling为客户端提供更灵活的安全防护,新增了GoogleCloudPub/Sub......
  • Centos安装Nodejs简单方式
    Node.js是一个基于ChromeV8引擎的​​JavaScript​​​运行时。本文主要讲的是如何在Linux即​​Centos上安装Nodejs的简单方式​​​,有比设置环境变量更加简单的方式......
  • 企业想要做好数据分析,可以试试瓴羊Quick BI
    企业的数字化发展已经成为了一个发展的方向,可是各个企业如何才可以实现数字化发展确实成为了难题。从很多企业的内部发展中来讲,每一个部分的数据化的分析都已经成为了行业的......
  • 在CentOS编译Git源码
    ​​Git​​​是一个​​免费的开源​​分布式版本控制系统,旨在处理从小到小到的所有内容具有速度和效率的超大型项目。Git​​易于学习​​​,​​占用空间很小,性能快如闪......
  • 使用Docker恢复Mysql8备份的Data数据 - 诚哥博客
    前段时间公司数据库服务器崩溃启动不起来,经过我初步排查是/home目录挂载不上导致启动不起来,虽然通过注释/etc/fstab中的挂载信息,启动了,但是发现mysql数据有缺失,还好有例行......