在发现了string的不便之处,而string的替代解决方案就是StringBuilder的使用..它的使用也很简单System.Text.StringBuilder sb = new System.Text.StringBuilder();这样就初始化了一个StringBuilder ..之后我们可以通过Append()来追加字符串填充到sb中..在你初始化一个StringBuilder 之后,它会自动申请一个默认的StringBuilder 容量(默认值是16),这个容量是由Capacity来控制的.并且允许,我们根据需要来控制Capacity的大小,也可以通过Length来获取或设置StringBuilder 的长度..先来看Length的用法:
1System.Text.StringBuilder sb = new System.Text.StringBuilder();2
sb.Append( "123456789" );//添加一个字符串3
sb.Length = 3;//设置容量为34
Console.WriteLine( sb.ToString() );//这里输出:1235
6
sb.Length = 30;//重新设置容量为307
Console.WriteLine( sb.ToString() + ",结尾");//这里在原来字符串后面补齐空格,至到Length的为308
Console.WriteLine( sb.Length );//这里输出的长度为30
1System.Text.StringBuilder sb = new System.Text.StringBuilder();//初始化一个StringBuilder 2
Console.Write( "Capacity:" + sb.Capacity );//这里的Capacity会自动扩大 3
Console.WriteLine( "\t Length:" + sb.Length ); 4
5
sb.Append( '1',17 );//添加一个字符串,这里故意添加17个字符,是为了看到Capacity是如何被扩充的 6
Console.Write( "Capacity:" + sb.Capacity );//这里的Capacity会自动扩大 7
Console.WriteLine( "\t Length:" + sb.Length ); 8
9
sb.Append( '2',32 );//添加一个字符串10
Console.Write( "Capacity:" + sb.Capacity );//这里的Capacity会自动扩大11
Console.WriteLine( "\t Length:" + sb.Length );12
13
sb.Append( '3',64 );//添加一个字符串14
Console.Write( "Capacity:" + sb.Capacity );//这里的Capacity会自动扩大15
Console.WriteLine( "\t Length:" + sb.Length );16
17
//注意这里:如果你取消Remove这步操作,将会引发ArgumentOutOfRangeException异常,因为当前容量小于18
19
//Length,这在自己控制StringBuilder的时候务必要注意容量溢出的问题20
21
sb.Remove(0,sb.Length);//移出全部内容,再测试22
sb.Capacity = 1;//重新定义了容量23
sb.Append( 'a',2 );24
Console.Write( "Capacity:" + sb.Capacity );//这里的Capacity会自动扩大25
Console.WriteLine( "\t Length:" + sb.Length );26
27
sb.Append( 'b',4 );28
Console.Write( "Capacity:" + sb.Capacity );//这里的Capacity会自动扩大29
Console.WriteLine( "\t Length:" + sb.Length );30
31
sb.Append( 'c',6 );32
Console.Write( "Capacity:" + sb.Capacity );//这里的Capacity会自动扩大33
Console.WriteLine( "\t Length:" + sb.Length
1Capacity:16 Length:0 //输出第一次,默认的Capacity是162
Capacity:32 Length:17 //第二次,我们故意添加了17个字符,于是Capacity=Capacity*23
Capacity:64 Length:49 //继续超出,则Capacity=Capacity*24
Capacity:128 Length:1135
Capacity:3 Length:2 //清空内容后,设置Capacity=1,重新添加了字符6
Capacity:7 Length:6 //后面的结果都类似7
Capacity:14 Length:12
1System.Text.StringBuilder sb = new System.Text.StringBuilder(); 2
int i = 0; 3
long StartTime = DateTime.Now.Ticks; 4
while ( i < 100000 ) { 5
sb.Append( i.ToString() ); 6
i++; 7
} 8
long EndTime = DateTime.Now.Ticks; 9
10
Console.WriteLine( "时间:" + ( EndTime-StartTime ) + "\t Capacity:"+ sb.Capacity + "\t Length:" 11
12
+ sb.Length);13
14
System.Text.StringBuilder sb1 = new System.Text.StringBuilder();15
i = 0;16
StartTime = DateTime.Now.Ticks;17
while ( i < 100000 ) 18
{ 19
if ( sb1.Capacity <= sb1.Length )//先判断是否>Length20
sb1.Capacity += 7;//这里一定要根据情况的增加容量,否则会有性能上的消耗21
sb1.Append( i.ToString() );22
i++;23
}24
EndTime = DateTime.Now.Ticks;25
26
Console.WriteLine( "时间:" + ( EndTime-StartTime ) + "\t Capacity:"+ sb1.Capacity + "\t 27
28
Length:" + sb1.Length);
1System.Text.StringBuilder sb = new System.Text.StringBuilder(); 2
int i = 0; 3
long StartTime = DateTime.Now.Ticks; 4
while ( i < 100000 ) { 5
sb.Append( i.ToString() ); 6
i++; 7
} 8
long EndTime = DateTime.Now.Ticks; 9
10
Console.WriteLine( "时间:" + ( EndTime-StartTime ) );11
12
string sb1 = null;13
i = 0;14
StartTime = DateTime.Now.Ticks;15
while ( i < 100000 ) 16
{ 17
sb1 += i;18
i++;19
}20
EndTime = DateTime.Now.Ticks;21
Console.WriteLine( "时间:" + ( EndTime-StartTime ));