学习之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。

时间: 2025-01-08 21:55:38

学习之StringBuilder(续)的相关文章

Entity Framework 学习第二天 续

今天来写一点不一样的删除,修改,查询 下面只写了几个方法 1 /// <summary> 2 /// 根据删除条件进行删除 3 /// </summary> 4 /// <param name="removeWhere"></param> 5 public void remove(System.Linq.Expressions.Expression<Func<StudentInfo, bool>> removeWh

Entity Framework 学习第一天 续

改写第一天的增删改查方法,观察增删改查的本质 1 using System; 2 using System.Collections.Generic; 3 using System.Data.Entity.Infrastructure; 4 using System.Linq; 5 using System.Text; 6 using System.Threading.Tasks; 7 8 namespace EFConsole 9 { 10 class Program 11 { 12 publi

学习之StringBuilder

1)此类表示值为可变字符序列的类似字符串的对象.之所以说值是可变的,是因为在通过追加.移除.替换或插入字符而创建它后可以对它进行修改.无法继承此类. 2)命名空间:System.Text     程序集:mscorlib(在 mscorlib.dll 中) 3)StringBuilder 的容量是实例在任何给定时间可存储的最大字符数,并且大于或等于实例值的字符串表示形式的长度.容量可通过Capacity 属性或EnsureCapacity 方法来增加          或减少,但它不能小于 Le

unicode学习笔记(续)

为了学习unicode的utf-8和utf-16编码,写了如下程序进行学习. import java.nio.charset.Charset; public class MyStudy {          public static String field = "%-20s";          public static void main(String[] args){                 System.out.format(field, "utf-16 

JFinal学习 &amp; Gradle配置续

接上一篇对Gradle的学习,再用JFinal项目再建一个. gradle配置如下: group 'com.jfinal' version '1.0-SNAPSHOT' apply plugin: 'java' sourceCompatibility = 1.8 repositories { // maven库 def cn = "http://maven.aliyun.com/nexus/content/groups/public/" def abroad = "http:

Java学习资料-StringBuilder与StringBuffer的区别

相信大家看到过很多比较String和StringBuffer区别的文章,也明白这两者的区别,然而自从Java 5.0发布以后,我们的比较列表上将多出一个对象了,这就是StringBuilder类.String类是不可变类,任何对String的改变都会引发新的String对象的生成:而StringBuffer则是可变类,任何对它所指代的字符串的改变都不会产生新的对象,可变和不可变类这一对对象已经齐全了,那么为什么还要引入新的StringBuilder类干吗?相信大家都有此疑问,我也如此.下面,我们

学习2____String,StringBuilder,StringBuffer

一:String: String类不可变的原因:底层是由private final char [ ]修饰的字符数组,这也决定了String类不可被继承(final修饰):  1.构造方法:由于在内存中存放的方式不同(常量池,堆),String可以使用常量进行赋值. //两种方式的构造方法: String str="123"; //引用类型,但可以向常量一样赋值,因为在内存中存放的方式不一样 String str =new String ("123"); 2.常用方法

零基础学习js——基础续

while语句 每次执行完语句块之后,又会跳回去检查小括号()里面的布尔值,如果为true,即再执行语句块. while(true){ console.log('true') }   //求1+2+3+...+100=?的值 var i=1; var s=0; while(i<=100){ s=s+i; i++; } console.log(s); continue 语句 终止本次循环,跳到顶部重新执行 var i=1; while(i<=5){ if(i===3){ continue; }

UI学习之常用方法(续)

UINavigationController UIButton *myButton = [UIButton buttonWithType:UIButtonTypeSystem]; //[UIButton buttonWithType:UIButtonTypeCustom];//显示真实图标颜色 myButton.frame = CGRectMake(0, 0, 30, 30); // myButton.backgroundColor = [UIColor colorWithPatternImag