繁体中文
设为首页
加入收藏
当前位置:.Net技术首页 >> Asp.Net开发 >> StringBuilder类学习

StringBuilder类学习

2007-09-15 08:00:00  作者:  来源:互联网  浏览次数:0  文字大小:【】【】【
简介:String 对象是不可改变的。每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新的 String 对象相关...
关键字:StringBuilder 学习

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("");

sb.Append("

");

sb.Append("

");

sb.Append("

"

,content

,moduleName);

sb.Append("

");

sb.Append("

");

sb.Append("

");

sb.Append("");

sb.AppendFormat("

{0}

");

sb.Append("");

sb.Append("

");

sb.Append("");

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("

");

sb.Append("

"

,DataViewNews[i].Row["title"].ToString()

,DataViewNews[i].Row["newsid"].ToString());

sb.Append("

"

,DataViewNews[i].Row["newstime"].ToString().Substring(0,timeTrimer) );

sb.Append("

");

}

sb.AppendFormat("

");

sb.Append("

");

sb.Append("");

sb.AppendFormat("{0}

");

sb.AppendFormat("{0}

"

,moduleName);

sb.Append("");

sb.Append("

");

return sb.ToString();

}

责任编辑:admin
相关文章