[C#]字串

字串

C#中的字串可以使用 String 類別,String 類別為字元(Char)集合所組成,因此當要使用字串時,使用String關鍵字並宣告一組字元陣列,

String本身是唯讀的,在第一次宣告時使用引號( " )宣告常值。

            char []  value= new char[] { '字','串','為','c','h','a','r','集','合','所','組','合','而','成' };
            String news = new string(value);
            for (int i = 0; i < news.Length; i++)
            {
                if (news[i] == '字')
                    Console.WriteLine("這個字串有:" + news[i]);
            }

            //出現錯誤,無法指定屬性或索引子,其為唯讀
            //news[0] = '不';

Output :

2012-04-28_171246

 

上面範例有使用到運算子 ( + ),字串可以透過 + 來作串接(concatenate),並且 + 運算子會自動協助強制轉型,

以下範例展現,字串串接數值,而不會出現錯誤,因為 + 運算子已經將該值轉換為字串。

            string str = "gdf";
            int number = 5;
            string result = str + number;
            Console.WriteLine(result);

Output :

2012-04-28_165523

 

有關String有一個該注意的地方,有關String為不變的,何謂不變的,表示一旦建立則就不可以改變。

這個原理,其實令人很不解,明明宣告的值就可以改變,其實修改String物件內容時,實際上都會再產生一個修改結果的String物件,

也就是說,當字串內容改變時,實際上只是將物件參考指向另一個新的物件,因為垃圾處理機制將會把沒用到的這些String物件清除掉,

因此比較不容易注意到已經宣告許多String物件。

 

            //MSDN:
            //物件string是不可變動的,String 物件稱為不變的 (唯讀),因為建立它之後便無法修改它的值。
            //看起來好像會修改 String 物件的方法實際上是傳回含有修改的新 String 物件。
            //如果有必要修改字串式物件的實際內容。請使用 System.Text.StringBuilder 類別。
            //指向同一個字串物件,所以會相等
            string str = "test";
            string str2 = "test";
            Console.WriteLine(str.Equals(str2));

            Output :
            true

 

當變數q傳入ToUpper時,實際上是傳入參考(reference),這個參考指向how所在的位置,

傳入ToUpper()1的參考為一個複製的副本,這邊先稱它為s,s只存活於ToUpper()裡,

當離開ToUpper()後,s就被扔掉了。

這邊可以發現,String object只要有變動就會新增一個String object,要避免一直產生String object則可以使用StringBuilder。

使用StringBuilder主要為了避免產生許多String object,並且免去一直重新配置暫存空間的動作,還有減少垃圾回收機制。

            string headerText = "Dear jerry:";
            string context = "別在砍樹讓後人曬太陽了!";
            string footText = "Thanks & Regards,jerry";
            string ToHimself = headerText + "\n" + context + "\n" + footText;
            Console.WriteLine("String");
            Console.WriteLine(ToHimself+"\n");

            StringBuilder mail = new StringBuilder();
            mail.AppendLine("Dear jerry:");
            mail.AppendLine("別在砍樹讓後人曬太陽了!");
            mail.AppendLine("Thanks & Regards,jerry");
            Console.WriteLine("StringBuilder");
            Console.WriteLine(mail.ToString());

Output:

2012-04-28_170738

 

本篇筆記主要紀錄有關String 物件一些小重點,也是經常忽略的地方,而string的方法則分開紀錄。

格式化字串

字串切割

字串比較

結語:

字串應該是平常用最兇的物件之一了,寫完這篇文章後對於String的皮毛有一點了解,繼續努力加油!
string 與 stringbuilder 在考試中也常出現,而在字串串接上,以往也沒有使用stringBuilder的習慣,
瞭解String 物件後,才開始習慣使用stringBuilder再串接字串。


如文章有觀念錯誤,麻煩告知,說法或寫法有更佳的作法也請不吝告知,感恩。

 

註1:在Thinkng in java裡有提到一個小重點,引數為函式的資訊提供者,並非即將被修改的某個事物,讓程式碼更易於撰寫和理解。

 

如文章有錯誤,煩請告知,新人發帖請多包涵

 

創用 CC 授權條款