动态串StringBuilder

与String类相比,System.Text.StringBuilder类可以实现动态字符串。此外,动态的含义是指在修改字符串时,系统不需要创建新的对象,不会重复开辟新的内存空间,而是直接在原StringBuilder对象的基础上进行修改。下面,将从各个应用的角度,详细讨论StringBuilder类。

1. 声明StringBuilder串

StringBuilder类位于命名空间System.Text中,使用时,可以在文件头通过using语句引入该空间:

using System.Text;

声明StringBuilder对象需要使用new关键字,并可以对其进行初始化。如以下语句声明了一个StringBuilder对象myStringBuilder,并初始化为“Hello”:

StringBuildermyStringBuilder=new StringBuilder("Hello");

如果不使用using关键字在文件头引入System.Text命名空间,也可以通过空间限定来声明StringBuilder对象:

System.Text.StringBuildermyStringBuilder=new StringBuilder("Hello");

在声明时,也可以不给出初始值,然后通过其方法进行赋值。

2. 设置StringBuilder容量

StringBuilder对象为动态字符串,可以对其设置好的字符数量进行扩展。另外,还可以设置一个最大长度,这个最大长度称为该StringBuilder对象的容量(Capacity)。

为StringBuilder设置容量的意义在于,当修改StringBuilder字符串时,当其实际字符长度(即字符串已有的字符数量)未达到其容量之前,StringBuilder不会重新分配空间;当达到容量时,StringBuilder会在原空间的基础之上,自动不进行设置,StringBuilder默认初始分配16个字符长度。有两种方式来设置一个StringBuilder对象的容量。

1.使用构造函数

StringBuilder构造函数可以接受容量参数,例如,下面声明一个StringBuilder对象sb2,并设置其容量为100。

//使用构造函数

StringBuilder sb2=new StringBuilder("Hello",100);

2.使用Capacity读/写属性

Capacity属性指定StringBuilder对象的容量,例如下面语句首先一个StringBuilder对象sb3,然后利用Capacity属性设置其容量为100。

//使用Capacity属性

StringBuilder sb3=new StringBuilder("Hello");

sb3.Capacity=100;

3. 追加操作

追加一个StringBuilder是指将新的字符串添加到当前StringBuilder字符串的结尾处,可以使用Append和AppendFormat来实现这个功能。

1. Append方法

Append方法实现简单的追加功能,常用形式为:

public StringBuilder Append(object value);

其中,参数value既可以是字符串类型,也可以是其他的数据类型,如bool、byte、int等。下例中,把一个StringBuilder字符串“Hello”追加为“Hello World!”。

//Append

StringBuilder sb4=new StringBuilder("Hello");

sb4.Append(" World!");

2.AppendFormat方法

AppendFormat方法可以实现对追加部分字符串的格式化,可以定义变量的格式,并将格式化后的字符串追加在StringBuilder后面。常用的形式为:

StringBuilder AppendFormat(string format,params object[] args);

其中,args数组指定所要追加的多个变量。format参数包含格式规范的字符串,其中包括一系列用大括号括起来的格式字符,如{0:u}。这里,0代表对应args参数数组中的第0个变量,而‘u’定义其格式。下例中,把一个StringBuilder字符串“Today is”追加“Today is *当前日期*\”。

//AppendFormat

StringBuilder sb5=new StringBuilder("Today is ");

sb5.AppendFormat("{0:yyyy-MM-dd}",System.DateTime.Now);

Console.WriteLine(sb5); //形如:"Today is 2008-10-20"

4. 插入操作

StringBuilder的插入操作是指将新的字符串插入到当前的StringBuilder字符串的指定位置,如“Hello”变为“Heeeello”。可以使用StringBuilder类的Insert方法来实现这个功能,常用形式为:

public StringBuilder Insert(int index, object value);

其中,参数index指定所要插入的位置,并从0开始索引,如index=1,则会在原字符串的第2个字符之前进行插入操作;同Append一样,参数value并不仅是只可取字符串类型。

5. 删除操作

StringBuilder的删除操作可以从当前StringBuilder字符串的指定位置,删除一定数量的字符,例如把“Heeeello”变为“Hello”。可以使用StringBuilder类的Remove方法来实现这个功能,常用形式为:

public StringBuilder Remove(int startIndex, int length);

其中,参数startIndex指定所要删除的起始位置,其含义同Insert中的index相同;length参数指定所要删除的字符数量。下例中,把一个StringBuilder字符串“Heeeello”通过删除操作修改为“Hello”。

//Remove

StringBuilder sb7=new StringBuilder("Heeello");

sb7.Remove(2,3); //在”He”后面删除个字符

Console.WriteLine(sb7); //"Hello!"

6. 替换操作

StringBuilder使用Replace方法来实现替换操作,例如把“Hello”变为“Hero”,就需要使用替换操作,将“ll”替换为“r”。这同String类的Replace方法非常类似,其常用

形式包括:

public StringBuilder Replace(char oldChar, char newChar);

public StringBuilder Replace(string oldValue, string newValue);

其中,参数oldChar和oldValue为待替换的字符和子串,而newChar和newValue为替换后的新字符和新子串。

下例把“Hello”通过替换为“Hero”。

//Replace

StringBuilder sb8=new StringBuilder("Hello");

sb8=sb8.Replace("ll","r");

Console.WriteLine(sb8); //Hero

7. 与String比较

通过上面的介绍,可以看出StringBuilder与String在许多操作上(如Insert、Remove、Replace)上是非常相似的。

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

在两者的选择上,如果应用对于系统性能、内存要求比较严格,以及经常处理大规模的字符串,推荐使用StringBuilder对象;否则,可以选择使用String。

 
1

字符串处理总结之二(C#StringBuilder类)的更多相关文章

  1. Java基础——数组应用之StringBuilder类和StringBuffer类

    接上文:Java基础——数组应用之字符串String类 一.StringBuffer类 StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和 ...

  2. Java StringBuilder类

    StringBuilder的原理 String类 字符串是常量,它们的值在创建之后不能更改 字符串的底层是一个被final修饰的数组,不能改变 private final byte[] value; ...

  3. java -> StringBuffer与StringBuilder类

    字符串缓冲区 StringBuffer类 在学习String类时,API中说字符串缓冲区支持可变的字符串,什么是字符串缓冲区呢?接下来我们来研究下字符串缓冲区. 查阅StringBuffer的API, ...

  4. Java学习笔记 02 String类、StringBuilder类、字符串格式化和正则表达式

    一.String类一般字符串 声明字符串 >>String str 创建字符串 >>String(char a[])方法用于将一个字符数组创建为String对象 >> ...

  5. 数据结构和算法 – 4.字符串、 String 类和 StringBuilder 类

    4.1.String类的应用 class String类应用 { static void Main(string[] args) { string astring = "Now is The ...

  6. 动态字符串 Stringbuilder类

    StringBuilder动态字符串 string 类型的修改会浪费资源,如果要修改字符串而不创建新的对象,则可以使用 System.Text.StringBuilder 类, stringbuild ...

  7. C#--数组、字符与字符串--StringBuilder类、字符与字符串、字符及转义字符

    C#--数组 字符与字符串--StringBuilder类 字符与字符串 字符及转义字符

  8. AJPFX关于StringBuffer,StringBuilder类总结(二)

    StringBuffer,StringBuilder类 总结2需要注意的知识点:1):// String -- >StringBuffer        String s = "hel ...

  9. C#中的字符串——用Stringbuilder类很重要

    注:这篇文章基本是<C#高级编程>(第七版)第九章的学习笔记. 众所周知,C#中处理字符串通常用的都是string,它其实是.NET基础类System.String类的映射.注意一个是小写 ...

随机推荐

  1. 继续Django

    环境准备 1.    创建一个Django后,Django的目录: │ manage.py │ ├─Django_s1 │ settings.py │ urls.py │ wsgi.py │ __in ...

  2. sqlserver日志的备份与还原

    ----------完整备份与还原----------                --完整备份数据库--backup database studb to disk='e:\stu.bak'back ...

  3. java基础类型、包装器

    char a = 'h';  //类包装器 Character aobj = a ;//自动装箱 byte b = 6; Byte bobj = b; short s = 234; Short sob ...

  4. My97DatePicker日期插件

    My97DatePicker是一款优秀的日期插件,它可以很方便地实现各种日期选择效果,博得广大IT开发人员的青睐. 下面来讲讲它的常用功能及设置方法. 方法/步骤   先来最简单的配置方法: (1)下 ...

  5. jsp作为服务端,ajax请求回应

    刚学ajax,想以jsp作为服务端,来回应ajax的请求: 代码如下: <!DOCTYPE html> <html> <head lang="en"& ...

  6. 在Eclipse 中使用tomcat8

    最新版本的Eclipse让人不支持 Tomcat 8,该方法让Eclipse能使用Tomcat8 第一步:下载最新版本Eclipse for Java EE 第二步:到WTP downloads pa ...

  7. VBA控制outlook自动发送邮件(转)

    使用Excel VBA实现Outlook自动发送邮件 | 在工作上我们都会遇到批量发送邮件的情况,面对重复而规律性的工作,可以使用Excel的VBA实现自动批量化发送邮件.大大减小工作时间,提升工作效 ...

  8. hdu5714 拍照[2016百度之星复赛C题]

    由于船移动的速度都一样,那么对于往一个方向的船相对距离其实是不变的,我们可以把往一个方向移动的船都视作静止,并求出在哪些观测位置可以看到,很明显对于船[x,y,z],当x+z>=y-z的时候,可 ...

  9. 一个简单的c# 贪吃蛇程序

    一个简单的c#贪吃蛇程序 程序分为界面设计和程序设计:界面设计和程序设计均参考了一些游戏实例,但是所有代码内容是本人编写. 由于看到别人写的程序并没有署名,这里的署名全部都是csdn官网. 游戏界面设 ...

  10. 想学习Android开发

    最近被别人说知识面窄,心里受伤了.准备学学Android开发,如果能在手机里运行自己写的app,那是多么high ~~~ Android开发需要看什么资料呢? 说明:本人一直从事windows下的C+ ...