c# string stringbuilder

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


發佈了1 篇原創文章 · 獲贊 12 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章