using System;
using System.Collections.Generic;
using System.Text;
namespace 字符串
{
class Program
{
static void Main( string[] args )
{
//字符串頻繁分配內存演示(不推薦)
//以下代碼將字符串全總向後移一個值,原來的字符串將會被替換成新加密後的.
//但是效率低下,greetingTxt這個string類型的對象,每次 += 時其實就是將原來的對象刪除引用,從而指向新的引用對象.
//這樣在循環中,多次對string重新分配內存,堆中將會產生大量的廢棄數據等待回收..
string greetingTxt = "Hello from all the guys atWrox Press. ZZZAAA";
for ( int i = 'z' ; i >= 'a' ; i-- )
{
char old = ( char )i;
char new1 = ( char ) (i + 1);
greetingTxt = greetingTxt.Replace( old , new1 );
}
for ( int i = 'Z' ; i >= 'A' ; i-- )
{
char old = ( char )i;
char new1 = ( char )( i + 1 );
greetingTxt = greetingTxt.Replace( old , new1 );
}
Console.WriteLine( greetingTxt );
Console.WriteLine( "StringBuilder----------------------------------" );
//StringBuilder 演示
//StringBuilder類只支持一般的字符串刪除增加功能,不像String那麼的多,但是效率極高
//String通常分配堆空間時,是剛剛好的大小.而StringBuilder一般會比需要的內存分配的多一些
//開發人員也可以指定StringBuilder要分配多少內存
// 2個重要屬性 Length 字符串的實際長度 Capacity 字符串存儲單元的最大長度(也就是最多可以佔多少內存)
//這樣,字符串的替換的效率就提高了,因爲可以在StringBuilder分配的空餘空間中進行操作.
//但是,刪除增加字符串時,仍有一定影響,因爲這樣會涉及到存儲大小的變
//通常如果增加一個字符串,超出本對象大小時,對象內存會自動翻版,以保證所需
//第二個參數是指字符對象最大數,通常應設一個儘量可能大的數.以確保不會重新擴展內存
StringBuilder sbStr = new StringBuilder( "Hello from all the guys atWrox Press. " , 150 );
Console.WriteLine( "Hello from all the guys atWrox Press".Length + "字符串大小");
//很明顯字符串大小是36,而我們給sb對象分配了150個字符的大小空間,這樣我們假定我們append的新字符不會超出150-36
//那麼sb對象將不會重新分配內存,我們的效率也就提高了
sbStr.Append( " Hello Aladdin!");
Console.WriteLine( sbStr );
//但是多次頻繁替換文件,才能真正用到sb所帶來的效率,同樣是上面的加密小例,我們用sb對象執行
for ( int i = 'z' ; i >= 'a' ; i-- )
{
char old = ( char )i;
char new1 = ( char )( i + 1 );
sbStr = sbStr.Replace( old , new1 );
}
for ( int i = 'Z' ; i >= 'A' ; i-- )
{
char old = ( char )i;
char new1 = ( char )( i + 1 );
sbStr = sbStr.Replace( old , new1 );
}
Console.WriteLine( sbStr + "加密後" );
//以上代碼使用了StringBuilder類的Replace方法,他不用在過程中複製字符串,效率會很高。
//StringBuilder類中除了Length 與 Capacity兩個重要屬性之外,還有一個MaxCapacity
//MaxCapacity是指最大的字符個數,一般默認是與int類型大小一樣。int.MaxValue!
//不過可以顯示的給定他的值,但是如果給定的最大值比指定的字符串空間大小小的話,會有一個異常
//例:我們把MaxCapacity給定爲100,而Capacity是150,這時會有一個異常
StringBuilder sb = new StringBuilder( 100 ,50 );
//總結: 一般StringBuilder用於字符串的操作,而;String用與字符串的展示!
Console.ReadLine();
}
}
}