1. 使用StringBuilder的好处

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

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

2. 创建StringBuilder

            StringBuilder s1 = new StringBuilder();
StringBuilder s2 = new StringBuilder(); //设置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("").Append(""); //输出: Hello World. I Love China.123456

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

            int MyCash = ;
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(, "Beautiful");
Console.WriteLine(strBuilder1);//Hello Beautiful World.

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

            StringBuilder strBiulder2 = new StringBuilder("Hello  World!");
strBiulder2.Remove(, );
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。

   

C#中的StringBuilder的更多相关文章

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

    JAVA之旅(十七)--StringBuffer的概述,存储,删除,获取,修改,反转,将缓存区的数据存储到数组中,StringBuilder 讲完String,我们来聊聊他的小兄弟 一.StringB ...

  2. JAVA 中的 StringBuilder 和 StringBuffer 适用的场景是什么?

    JAVA 中的 StringBuilder 和 StringBuffer 适用的场景是什么? 最简单的回答是,stringbuffer 基本没有适用场景,你应该在所有的情况下选择使用 stringbu ...

  3. 在 .NET Framework 中使用 StringBuilder 类

    在 .NET Framework 中使用 StringBuilder 类 String 对象是不可变的.每次使用 System.String 类中的一个方法时,都要在内存中创建一个新的字符串对象,这就 ...

  4. .net 中的 StringBuilder 和 TextWriter 区别

    最近闲来之余,看了一些开源的类库,看到有些类库喜欢用TextWriter类来记录相关的字符串数据,感到比较好奇,为啥不用StringBuilder类对象.于是在网上搜索了一番,总结了相关笔记. Str ...

  5. 关于String中+与StringBuilder的问题

      字符串连接可以通过两种方法实现,其中一种是在Java中提供的一个StringBuilder类(这个类只在J2SE5及以上版本提供,以前的版本使用StringBuffer类). 字符串是Java程序 ...

  6. java中string stringbuilder stringbuffer 的区别

    1. String 类 String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间. String a = "a&qu ...

  7. .NET中的StringBuilder

    为什么要使用StringBuilder 为什么使用StringBuilder要从string对象的特性说起. string对象在进行字符串拼接时,因为字符串的不可变性,string对象会每次拼接,都会 ...

  8. Java中String, StringBuilder和StringBuffer

    Java中常用来处理字符串的类有三个: String, StringBuffer和StringBuilder. 区别 三者都继承自CharSequence接口, 首先说明三者间主要区别 String字 ...

  9. java中String StringBuilder StringBuffer比较和效率(性能)测试

    string stringbuilder stringbuffer三者的区别 从JDK源码看,String.StringBuilder.StringBuffer都是存放在char[] 数组字符串. 简 ...

随机推荐

  1. WEB项目(B/S系统)打包安装(总结篇)

    原文:WEB项目(B/S系统)打包安装(总结篇) 打包安装程序的制作选择性还很多的,有installshield,wise installer,inno setup这几个做打包安装项目都是很强大的,要 ...

  2. Android多画面幻灯片:ViewPager基础上,利用与PagerTabStrip出生缺陷(源代码)

    近期使用ViewPager.读了几个人说是不是很清晰的信息,干脆自己写demo总结下. 样例非常easy.Activity里有三个界面能够滑动.每个界面都有一个button并设置好了监听.PagerT ...

  3. win7 Python 环境 准备 配置

    包括Python,eclipse,jdk,pydev,pip,setuptools,beautifulsoup,pyyaml,nltk,mysqldb的下载安装配置. **************** ...

  4. mysql主从同步配置(windows环境)

    mysql主从同步配置(mysql5.5,windows环境)   A主机(作为主服务器)环境:windows8.mysql5.5 ip:192.168.1.100(自己填) B主机(作为从服务器,由 ...

  5. beanutils设置参数和获取参数

    public class Employee implements DynaBean  { private String  firstName="李";    private Str ...

  6. 使用 ArcGIS Online和APP进行监控操作和数据采集

    主要介绍的App是Operations Dashboard for ArcGIS 和 Collector for ArcGIS,它们 提高了组织内日常操作的效率.精度和响应速度. 已经购买了 ArcG ...

  7. mvc日期控件datepick的几篇文章,日后再总结吧

    instinctcoder里有两篇,入门级的 http://instinctcoder.com/asp-net-mvc-4-jquery-datepicker/ http://instinctcode ...

  8. SZU:B54 Dual Palindromes

    Judge Info Memory Limit: 32768KB Case Time Limit: 10000MS Time Limit: 10000MS Judger: Number Only Ju ...

  9. 使用Vim进行开发

    从士兵到程序员再到SOHO程序员 (二)   原文地址: http://blog.huhao.name/blog/2013/12/13/become-a-freelancer-2/ 作者:胡皓 Blo ...

  10. Event notifications

    SQL Server 事件通知(Event notifications) 2013-12-13 17:21 by 听风吹雨, 333 阅读, 3 评论, 收藏, 编辑 一. 背景 SQL Server ...