.net框架读书笔记---.net文本处理(StringBuilder)

接上一篇.net框架读书笔记---.net文本处理(String),本文主要讨论如何高效的使用System.Text.StringBuilder来动态的创建字符串。

  StringBuilder对象内部有一个指向Char结构数组的字段。如果字符串的长度超出了原来分配的字符数组,StringBuilder会自动分配一个新的、更大的数组,并将原来字符数组中的字符拷贝至新的数组中,先前的数组将成为垃圾回收器回收的对象。

  通过StringBuilder的ToString方法可以将其装换为string对象,这个执行很快。返回的string是恒定不变的,不会随着StringBuilder的改变而改变。

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
namespace StringBuilderStudy
{
class Program
{
static void Main( string [] args)
{
StringBuilder strb
= new StringBuilder();
strb.Append(
" hap " );
string s = strb.ToString();
strb.Append(
" heaiping " );
Console.WriteLine(s);
// hap
}
}
}

   这是因为你如果我们调用StringBuilder上的方法试图改变StringBuilder中维护的字符串时,StringBuilder可以判断它的ToString方法是否被调用过,如果是,它会在内部创建并使用一个新的字符串数组。

  stringbuilder的最大容量为一个int字段,默认值为Int.MaxValue(20几亿吧),StringBuilder默认容量为16,当像StringBuilder的字符数组添加字符时,StringBuilder会检测数组的增长是否超出了其容量。如果超出StringBuilder

会自动将容量加倍,被分配一个新的数组,将原数组拷贝至新分配的数组中,原数组将会被垃圾回收器回收,这样会影响系统性能的,所以在使用stringbuilder时给其设置一个合理的容量来避免这一点。

  StringBuilder是一个可变的字符串,意味着动态改变其内容不会在托管堆上面分配新的对象。但下面两种情况会分配新的对象:

  •  动态构造一个长度超过预设容量的字符串。
  • 调用stringbuilder的ToString方法后,试图改变字符数组。所以在StringBuilder调用完ToString方法后不要再对其做多次的修改。

  StringBuilder有两个成员需要注意,Capacity,容量,这个与StringBuilder所包含的字符的多少没有关系,指的是其初始容量。如果对其赋值一个小于字符串长度的值将会爆出ArgumentOutOfRangException异常。Length其包含的字符串的真正长度,其值一般小于Capacity。

  StringBuilder没有和string对等的方法,这样可能我们会为了使用StringBuilder和String的一些方法在这两个对象之间转换,当然性能是大打折扣,本书作者Jeffrey Richter希望微软能够进一步完善StringBuilder,让我们拭目以待。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值