C#中的StringBuilder

1. 使用StringBuilder的好处

   由于string对象是不可更改的,我们每次使用string类的方法时,都会在内存中重新创建一个新的string对象,这时候就要为该对象分配内存空间了。如果在一段代码中,频繁执行string类的方法来修改字符串对象,那么内存消耗就会很大。例如,在一个循环中,频繁地进行字符串拼接的操作,假如这个循环执行多次,那么每次拼接字符串所产生的字符串将会吃掉很多内存空间。所以,为了提升程序的性能,在需要修改字符串而不要重新创建字符串的时候,我们采用System.Text.StringBuilder类来处理。

  StringBuilder是用来保存可变的字符串的容器,是动态的字符串对象。

2. 创建StringBuilder

            StringBuilder s1 = new StringBuilder();
            StringBuilder s2 = new StringBuilder(20); //设置StringBuilder对象的最大容量
            StringBuilder s3 = new StringBuilder("abcdef");

3. StringBuilder的特点

  1. 对象的容量有大小

    可容纳的最大字符数是可以改变的,可以通过设置Capacity属性来改变。在没有达到容量前,它不会自动重新分配空间;当达到容量时,将自动分配新的空间且容量翻倍。

    EnsureCapacity   方法可用来检查当前   StringBuilder   的容量。如果容量大于传递的值,则不进行任何更改;但是,如果容量小于传递的值,则会更改当前的容量以使其与传递的值匹配。

  2. 保存的字符串的大小

    所容纳的字符串的长度是Length属性,也可以查看或设置   Length   属性。如果将   Length   属性设置为大于   Capacity   属性的值,则自动将   Capacity   属性更改为与   Length   属性相同的值。如果将   Length   属性设置为小于当前   StringBuilder   对象内的字符串长度的值,则会缩短该字符串。

  3. 可以使用ToString()将缓冲区数据转换为字符串

4. StringBuilder的常用方法

  

  (1)Append   方法可用来将文本或对象的字符串表示形式添加到由当前   StringBuilder   对象表示的字符串的结尾处。以下示例将一个   StringBuilder   对象初始化为“Hello   World”,然后将一些文本追加到该对象的结尾处。将根据需要自动分配空间。

            StringBuilder strBuilder = new StringBuilder("Hello  World.");
            strBuilder.Append(" I Love China."); //输出: Hello  World. I Love China.
            strBuilder.Append("123").Append("456"); //输出: Hello  World. I Love China.123456

  (2)AppendFormat   方法将文本添加到   StringBuilder   的结尾处,而且实现了   IFormattable   接口,因此可接受格式化部分中描述的标准格式字符串。可以使用此方法来自定义变量的格式并将这些值追加到   StringBuilder   的后面。以下示例使用   AppendFormat   方法将一个设置为货币值格式的整数值放置到   StringBuilder   的结尾。

            int MyCash = 200;
            StringBuilder MyStringBuilder = new StringBuilder("Your total is ");
            MyStringBuilder.AppendFormat("{0:C}  ", MyCash);
            Console.WriteLine(MyStringBuilder);// Your total is $200.00

  (3)Insert   方法将字符串或对象添加到当前   StringBuilder   中的指定位置。以下示例使用此方法将一个单词插入到   StringBuilder   的第六个位置。

            StringBuilder strBuilder1 = new StringBuilder("Hello  World.");
            strBuilder1.Insert(6, "Beautiful");
            Console.WriteLine(strBuilder1);//Hello Beautiful World.

  (4)Remove   可以使用   Remove   方法从当前   StringBuilder   中移除指定数量的字符,移除过程从指定的从零开始的索引处开始。以下示例使用   Remove   方法缩短   StringBuilder。

            StringBuilder strBiulder2 = new StringBuilder("Hello  World!");
            strBiulder2.Remove(5, 7);
            Console.WriteLine(strBiulder2);// Hello

  (5)Replace   使用   Replace   方法,可以用另一个指定的字符来替换   StringBuilder   对象内的字符。以下示例使用   Replace   方法来搜索   StringBuilder   对象,查找所有的感叹号字符   (!),并用问号字符   (?)   来替换它们。

            StringBuilder strBuilder3 = new StringBuilder("Hello  World!");
            strBuilder3.Replace(‘!‘, ‘?‘);
            Console.WriteLine(strBuilder3);//Hello  World?

4. StringBuilder  VS  String

  在操作性能和内存效率方面,StringBuilder要比String好得多,可以避免产生太多的临时字符串对象,特别是对于经常重复进行修改的情况更是如此。而另一方面,String类提供了更多的方法,可以使开发能够更快地实现应用。

  在两者的选择上,如果应用对于系统性能、内存要求比较严格,以及经常处理大规模的字符串,推荐使用StringBuilder对象;例如,在对数据库进行操作的时候,我们需要频繁地拼接SQL语句。否则,可以选择使用String。

   

时间: 2024-08-24 04:35:14

C#中的StringBuilder的相关文章

JAVA之旅(十七)——StringBuffer的概述,存储,删除,获取,修改,反转,将缓存区的数据存储到数组中,StringBuilder

JAVA之旅(十七)--StringBuffer的概述,存储,删除,获取,修改,反转,将缓存区的数据存储到数组中,StringBuilder 讲完String,我们来聊聊他的小兄弟 一.StringBuffer概述 关于StringBuffer这个对象,Buffer是什么意思?缓冲区的意思,String一旦初始化时不可以被改变的,而StringBuffer是可以的,这就是区别,特点: StringBuffer是一个容器 可以字节操作多个数据类型 最终会通过toString方法变成字符串 存储 S

.NET中的StringBuilder

为什么要使用StringBuilder 为什么使用StringBuilder要从string对象的特性说起. string对象在进行字符串拼接时,因为字符串的不可变性,string对象会每次拼接,都会复制一个副本出来进行运算,而本身的串仍然留在内存中,大量的临时片段会造成不可忽视的性能损耗.所以在进行大量的字符串拼接时建议使用StringBuilder StringBuilder的简单使用方式 string s1 = "33"; string s2 = "44";

C#中String StringBuilder StringBuffer

String和StringBuilder和StringBuffer,这三个都是值得深究一翻的,可能很多人会说,实在不行的话,都全部用StringBuilder,啥事没有,我不能说你的想法事不正确的,但是我可以给出更好的建议.下面简单介绍一下这三个类.  String类 在我们平时的使用当中很容易不注意到的是,自己写的代码很容易发生了装箱的操作(把值类型转换为引用类型).就比如很常见的,一个字符串拼接 string str=9+"test"; 通过查看IL代码可以知道这里发生了装箱的操作

Java 中 StringBuilder 在高性能用法总结

关于StringBuilder,一般同学只简单记住了,字符串拼接要用StringBuilder,不要用+,也不要用StringBuffer,然后性能就是最好的了,真的吗吗吗吗? 还有些同学,还听过三句似是而非的经验: 1. Java编译优化后+和StringBuilder的效果一样: 2. StringBuilder不是线程安全的,为了“安全”起见最好还是用StringBuffer: 3. 永远不要自己拼接日志信息的字符串,交给slf4j来. 1. 初始长度好重要,值得说四次. StringBu

JAVA中String和StringBuilder类的特点及使用

转自:https://www.imooc.com/code/2202 仅做个人学习记录之用,侵删! 什么是 Java 中的字符串 在 Java 中,字符串被作为 String 类型的对象处理. String 类位于 java.lang 包中.默认情况下,该包被自动导入所有的程序. 创建 String 对象的方法: Java 中字符串的不变性 String 对象创建后则不能被修改,是不可变的,所谓的修改其实是创建了新的对象,所指向的内存空间不同.如下所示: 运行结果: 结合上面的代码,关于字符串小

StringBuilder与StringBuffer

转:http://www.cnblogs.com/pepcod/archive/2013/02/16/2913557.html JAVA中用于处理字符串常用的有三个类: java.lang.String. java.lang.StringBuffer. java.lang.StringBuilder, 这三者的共同之处都是 final 类,不允许被继承,这主要是从性能和安全性上考虑的,因为这几个类都是经常被使用着的,且考虑到防止其中的参数被修改影响到其它的应用. StringBuffer 与 S

StringBuffer与StringBuilder

有些时候,需要由较短的字符串构建字符串.比如,按键或来自文件中的单词.采用字符串连接的方式达到此目的效率比较低.每次连接字符串的时候,都会构建一个新的String对象,既耗时,又浪费空间.使用StringBuilder类就可以避免这个问题的发生啦. 如果需要用许多小段的字符串构建一个字符串,那么我们可以用一下的方式: StringBuilder sb = new StringBuilder(); sb.append(ch); sb.append(str); String message = sb

JAVA中用于处理字符串的“三兄弟”

JAVA中用于处理字符串常用的有三个类:java.lang.String.java.lang.StringBuffer.java.lang.StringBuilder,这三者的共同之处都是final类,不允许被继承,这主要是从性能和安全性上考虑的,因为这几个类都是经常被使用着的,且考虑到防止其中的参数被修改影响到其它的应用.StringBuffer与StringBuilder两个基本上差不多,只是StringBuffer是线程安全,可以不需要额外的同步用于多线程中:StringBuilder是非

Java中String连接性能的分析

总结:如果String的数量小于4(不含4),使用String.concat()来连接String,否则首先计算最终结果的长度,再用该长度来创建一个StringBuilder,最后使用这个StringBuilder来连接所有String.      我建议大家如果确定需要连接的String的数量小于4的,直接使用String.concat()来连接,虽然StringBundler能够帮你自动处理这一情况,但创建一个String[]和那些方法调用都是一些无谓的开销. Java中的String是一个