String 对象是不可改变的。每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新的 String 对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用 System.Text.StringBuilder 类。例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder 类可以提升性能。
通过用一个重载的构造函数方法初始化变量,可以创建 StringBuilder 类的新实例,
Length的用法:
通过上面的代码,我们可以看出如果StringBuilder 中的字符长度小于Length的值,则StringBuilder 将会用空格硬填充StringBuilder ,以满足符合长度的设置..如果StringBuilder 中的字符长度大于Length的值,则StringBuilder 将会截取从第一位开始的Length个字符..而忽略超出的部分
Length 属性并不是只读的。
Capacity 属性
描述:当前为实例分配的字符数量。默认容量是16,如果将一个字符串作为参数提供给构造函数,容量以最接近 2 的幂的值。
EnsureCapacity( Int capacity ) 方法
描述:如果当前容量小于指定容量,内存分配会增加内存空间以达到指定容量。
MaxCapacity 属性
描述:这个实例中可以被分配的字符最大数量。
Append( ) 方法
描述:追加给定值的字符串表示。
StringBuilder sb=new StringBuilder( );
Console.WriteLine( sb.Capacity+"\t"+sb.Length );
sb.Append ( 'a' , 17 )
Console.WriteLine( sb.Capacity+"\t"+sb.Length );
16 0 <== 输出
32 17
Replace( Char oldchar,Char newchar ) 方法
描述:用newchar替换oldchar。
Replace( String oldstring,String newstring ) 方法
描述:用newstring替换oldstring。
Replace( Char oldchar,Char newchar,Int startpos,Int count ) 方法
描述:从startpos到count-1之间用newchar替换oldchar。
Replace( String oldstring,String newstring,Int startpos,Int count ) 方法
描述:从startpos到count-1之间用newstring替换oldstring。
ToString( ) 方法
StringBuilder sb=new StringBuilder( "I live this game" );
String s1=sb.ToString( ); //Displays "I live this game"
String s2=sb.ToString(3,4); //Displays "live"
在修改Capacity的时候,一定要确保Capacity >= Length,否则会引发ArgumentOutOfRangeException异常...看完结果,就可以推断出Capacity的公式:
if ( Capacity < Length && Capacity > 0 ){
Capacity *= 2;
}
StringBuilder是以当前的Capacity*2来扩充的..所以,在使用StringBuilder需要特别注意,尤其是要拼接或追加N多字符的时候,要注意技巧的使用,可以适当的,有预见性的设置Capacity的值,避免造成过大内存的浪费,节约无谓的内存空间..例如,下列代码就可以根据情况自动的扩展,而避免了较大的内存浪费.
在页面显示的内容类似的时候,使用StringBuilder会提高编码的效率。一方面页面的修改只需通过修改一个公共函数即可完成,不用每处都要修改;另一方面,很方便加一些参数,解决了静态页面文件和后台类文件之间传参的许多麻烦。
下面是显示某一栏目头几条新闻的例子:
protected System.Web.UI.WebControls.Literal LiteralJS;
LiteralJS.Text = JSIP.Common.Common.GetTopNews("IT",5);
public static string GetTopNews(string moduleName,int rowNumber)
{
DataSet ds = new DataSet();
ds = GetDataSet(moduleName,rowNumber);\\获取相应栏目新闻的DataSet
DataView DataViewNews = new DataView();
DataViewNews=ds.Tables["News"].DefaultView;
string content = GetModuleName(moduleName);\\根据模块名获取模块的内容说明
StringBuilder sb = new StringBuilder();
sb.Append("<table width='100%' cellpadding='0' cellspacing='0' border='0'>");
sb.Append("<TR><TD align='left'><TABLE cellSpacing='0' cellPadding='0' border='0'>");
sb.Append("<TR><TD width='19'>");
sb.Append("<IMG height='26' alt='' src='images/common/topic_bg_1.gif' width='19'></TD>");
sb.Append("<TD vAlign='bottom' background='images/common/topic_bg_2.gif' height='26'>");
sb.Append("<table width='100%' height='20' cellpadding='0' cellspacing='0' border='0'>");
sb.AppendFormat("<TR><TD class='topic-text'><a href='newsall.aspx?moduleName={1}'>{0}</a></TD></TR></TABLE></TD>"
,content
,moduleName);
sb.Append("<TD width='64'><IMG height='26' alt='' src='images/common/topic_bg_3.gif' width='64'></TD>");
sb.Append("</TR></TABLE></TD></TR><TR><TD>");
sb.Append("<TABLE class='table-main' cellSpacing='1' cellPadding='3' width='100%' border='0'>");
sb.Append("<TR class='td-main-2'><TD vAlign='top'>");
sb.Append("<table class='p9line
for(int i=0; i<=rowNumber; i++)
{
if(i >= ds.Tables["News"].Rows.Count)
break;
int timeTrimer = DataViewNews[i].Row["newstime"].ToString().IndexOf(" ");
sb.Append("<tr>");
sb.Append("<td width='87%' style='BACKGROUND: url(images/common/news_line2.gif) repeat-x left bottom; HEIGHT: 24px'>");
sb.Append("<IMG height='6' src='images/common/news_point.gif' width='24' align='absMiddle'>");
sb.AppendFormat("<a href='newsdetail.aspx?newsid={1}'>{0}</a></td>"
,DataViewNews[i].Row["title"].ToString()
,DataViewNews[i].Row["newsid"].ToString());
sb.Append("<td width='13%' style='BACKGROUND: url(images/common/news_line2.gif) repeat-x left bottom; HEIGHT: 24px; TEXT-ALIGN: center'>");
sb.AppendFormat("{0}</td>"
,DataViewNews[i].Row["newstime"].ToString().Substring(0,timeTrimer) );
sb.Append("</tr>");
}
sb.AppendFormat("<TR><TD></TD><TD height='15'> <a href ='newsall.aspx?modulename={0}'>"
,moduleName);
sb.Append("<img src='images/common/more.gif' >");
sb.Append("</a></TD></TR>");
sb.Append("</table></TD></TR></TABLE></TD></TR><TR><TD height='5'></TD></TR></TABLE>");
return sb.ToString();
}