600 likes | 787 Views
字 串. C# 關於字串處理有 String 類別及 StringBuilder 類別 , String 類別的使用 較為靈活簡單但不能修改其內容 ; StringBuilder 的功能較多 , 且還能修改字串的內容 , 但其使用程序較複雜。所以對於簡單的應用 , 能使用 String 類別解決 , 就用 String 類別即可 , 以下將分別介紹這兩種類別。. 1 0 -1 String 類別. 1 0 - 3 綜合範例. 1 0 -2 StringBuilder 類別. 1 0 -1 String 類別
E N D
字 串 C# 關於字串處理有 String 類別及 StringBuilder 類別, String 類別的使用 較為靈活簡單但不能修改其內容; StringBuilder 的功能較多, 且還能修改字串的內容, 但其使用程序較複雜。所以對於簡單的應用, 能使用 String 類別解決, 就用 String 類別即可, 以下將分別介紹這兩種類別。 1 0 -1 String 類別 1 0 - 3 綜合範例 1 0 -2 StringBuilder 類別
1 0 -1 String 類別 在本章之前, 字串的使用與基本資料型別的 int、float 及 bool 等均相 同。例如, 以下敘述是宣告並初始化變數 str 的初值為"abc"。 上式的效果等效於 此即為本節所要說明的 String 類別。其次, 在C# 中, string 代表 String類別的別名, 所以以下敘述的效果都相同。
建構子 String 類別的建構子共有 8 種多載, 本書並不一一介紹, 僅介紹以下String (char[]) 建構子, 其餘的內容讀者可自行查閱線上說明。 String (char[]) 此建構子需傳入一個字元型別的陣列作為初使化 String 物件的值。 例如, 以下敘述可建立一個 str 物件, 其初值為"abc"。 其次, 因為 String 類別的使用非常普及, C#為了減輕使用者的負擔, 以上敘述亦可簡化如下: 或
實例屬性 String 類別的常用實例屬性如下: Length 取得字串的長度, 例如, 結果是 5。 中文字的長度亦是每個字的長度為 1 。例如, 的結果是 3。
靜態方法 String 的常用靜態方法如下: Compare 比較兩個字串物件, 共有 6 種多載, 以下僅介紹兩種常用的多載, 分別說明如下: public static int Compare (string, string); 此方法的語法如下:
比較 strA 與 strB 兩物件, 並傳回一整數, 其意義如下: 物件的比較是依據 Unicode 先後順序, 排在後面的代表其值比較大,例如, 且逐一字元比較, 若前面的字元已能比較其大小, 則忽略後面字元的比較, 並直接傳回結果。例如,
中文的比較則逐字以其筆畫數目為比較大小的依據。例如,中文的比較則逐字以其筆畫數目為比較大小的依據。例如, 又例如, 以下敘述的結果都是 -1 。
public static int Compare (string, string, bool); 其語法如下: 比較 strA 與 strB 兩字串物件, 並可設定忽略或分辨其大小寫, 其傳回值與上述多載的意義相同。例如, 以下敘述可比較 s2、s3 兩字串, 並忽略其大小寫。 結果是 0。
Concat 傳回字串連結的結果, 共有 8 種多載, 在此僅介紹 3 種多載如下: 例如, 以下敘述可傳回兩個字串連結的結果。 結果是 abcdeabcxy 。
Copy 字串的複製, 其語法如下: 例如, 以下敘述可複製字串變數 s3 的值, 然後指定給字串變數 s4 。 結果是 ABCXY 。
實例方法 CompareTo 將這個執行個體與指定字串物件作比較, 其語法如下: 比較後會傳回一整數值, 其意義如下: 例如, 以下敘述可比較 s1 與 s2 兩字串物件。 結果是-1 。
copyTo 將指定數目的字元, 從這個執行個體的指定位置, 複製到指定字元陣列的指定位置, 且取代原字元。其語法如下: 例如, 以下敘述可將 s1 的索引 1 起複製 3 個字元至 b 字元陣列的索引2, 且取代原字元。。 結果是 01bcd56 。
Equals 判斷兩個字串是否相等。其語法如下: 例如, 以下敘述可判斷 s1 與 s2 是否相等。 結果是 False 。
IndexOf 根據指定字元或字串, 找出此執行個體中第一個符合項目的索引值, 共 有 6 種多載, 在此僅介紹 2 種常用的多載, 分別說明如下: public int IndexOf(char); 根據指定字元, 找出此執行個體中第一個符合該字元的索引位置, 如果 沒有找到, 則傳回-1 。例如, 以下敘述可找出字元'C' 在 s5 中的第一 個索引位置。 結果是 2 (索引值由 0 開始)。
public int IndexOf(string); 根據指定字串, 找出此執行個體中第一個符合該字串的索引位置, 如果 沒有找到, 則傳回-1 。例如, 以下敘述可找出字串"ce"在 s5 中的第一 個索引位置。 結果是 3。
Insert 將指定字串插入此執行個體的指定索引位置, 然後傳回一個新的 String執行個體, 原有執行個體的值並未被改變, 其語法如下: 例如, 以下敘述將字串"gh"插入至 s1 的第 5 個索引位置, 然後傳回一個新的 String 執行個體, 其值為"abcdegh", 而原有 s1 的值仍為"abcde"。
LastIndexOf 根據指定字元或字串, 找出此執行個體中最後一個符合項目的索引值,共有 6 種多載, 在此僅介紹 2 種常用的多載, 分別說明如下: public int LastIndexOf(char); 根據指定字元找出此執行個體中最後一個符合該字元的索引位置, 如果沒有找到則傳回-1 。例如, 以下敘述可找出字元'c'在 s5 中的最後一個索引位置。 結果是 3。
public int LastIndexOf(string); 根據指定字串, 找出此執行個體最後一個符合該字串的索引位置, 如果 沒有找到, 則傳回-1 。例如, 以下敘述可找出字串"ss"在 s5 物件中的 最後一個索引位置。 結果是 5。
Remove 將指定數目的字元由此執行個體指定起始位置刪除, 然後傳回一新的String 執行個體, 原有執行個體的值並未被改變, 其語法如下: 例如, 以下敘述從 s1 的第一個字元位置起刪除 3 個字元, 其傳回值為"de", 但原有 s1 的值仍為"abcde"。
Replace 以指定字元或字串, 取代此執行個體中符合該字元或字串的所有項目, 其傳回值為一更改後的新字串, 原有執行個體中的值並未改變。共有 2 種多載, 分別說明如下: public string Replace(char, char); 其語法如下: 以 newChar 取代此執行個體中符合 oldChar 的所有字元。例如, 以下敘述將以一新字元'x' 取代 s5 執行個體中的舊字元'c', 其傳回值為 "suxxess", 而原有 s5 的值仍為"success"。
public string Replace(string, string); 其語法如下: 以字串 newValue 取代此執行個體中符合 oldValue 的所有字串。例如,以下敘述將以新字串"eed"取代 s5 執行個體中的舊字串"ess", 其傳回值為"succeed", 而原有 s5 的值仍為"success"。
Substring 由執行個體中擷取子字串。共有 2 種多載, 分別說明如下: public string Substring(int); 其語法如下: 從指定索引位置開始擷取子字串, 一直擷取到最後一個字元的索引位置。例如, 以下敘述可從 s1 的第 3 個字元位置 (索引值2) 開始擷取子字串。 結果是 cde 。
public string Substring(int, int); 其語法如下: 從指定索引位置開始擷取指定長度的子字串。例如, 以下敘述可從 s1的第 3 個字元位置 (索引值 2) 開始擷取長度為 2 的子字串。 結果是 cd 。
ToCharArray 將此執行個體的字元複製到一字元陣列中, 其語法如下: 例如, 以下敘述可將 s1 的所有字元複製到 c 字元陣列中。 結果是 ac。
ToLower 將此執行個體的字串內容改為小寫, 然後傳回一新的字串, 原本執行個體的字串內容並未改變。共有 2 種多載, 以下僅介紹最常用的一種多載。 例如, 以下敘述可將 s3 物件的字串內容改為小寫, 然後傳回一個新的 字串, 其值為"abcxy", 但原本 s3 物件的字串內容並未改變。
ToUpper 將此執行個體的字串內容改為大寫, 然後傳回一新的字串, 原本執行個體的字串內容並未改變。共有 2 種多載, 以下僅介紹最常用的一種多載。 例如以下敘述可將 s1 的字串內容改為大寫, 然後傳回一個新的字串,其值為"ABCDE", 但原本 s1 的字串內容並未改變。
Trim 將字串兩端的空白字元移除。其語法如下: 例如, 以下敘述可將 s6 字串內容兩端空白字元移除, 並傳回一新的字串。 結果是 abcde 。
Spilt Spilt 方法可用來切割字串, 共有 6 種多載如下:
本書僅介紹一種多載如下: 以上多載的語法如下: 也就是將指定字串, 以 char[] 陣列的元素進行切割, 並將結果以字串陣列傳回。例如, 待切割字串 s7 如下: 欲以空白作為分割依據, 所以設定 c1 字元陣列如下:
執行 Split 方法如下: s8 字串輸出敘述如下: 則結果如下:
現若將切割依據增加點 (.) ,則其敘述如下: 重新執行 Split 方法如下: 輸出敘述如下: 則其結果如下: 點 (.) 已經消失。
1 0 -2 StringBuilder 類別 前面的 String 類別的物件一經建立, 就無法修改其內容, 但是本單元 的 StringBuilder 是一個進階的字串處理類別, 此類別的物件, 可以修改其內容。此外 StringBuilder 類別屬於 System.Text 命名空間, 所以在程式開頭記得要宣告如下: 程式才能順利執行。
建構子 StringBuilder 類別的建構子共有 6 種多載, 在此僅介紹 3 種常用的多載,分別說明如下: public StringBuilder(); 此建構子不需要傳遞任何參數, 並將物件內容初始化為空字串, 且其預設的容量 (capacity) 是 16。例如, 以下敘述可建立一個 s 物件, 其內容為空字串, 其容量是 16 。
public StringBuilder(int); 此建構子需要傳遞一個 int 型別的參數來指定 StringBuilder 類別物件的容量。例如, 以下敘述可建立一個 s1 物件, 其容量是 10 。 public StringBuilder(string); 此建構子需要傳遞一個 String 型別的參數來指定 StringBuilder 類別物件的初始值。例如, 以下敘述可建立一個 StringBuilder 類別的 s2 物件, 此物件的內容是"abc" 。
實例屬性 Capacity 取得或設定目前執行個體可包含最大字元數的記憶體空間。例如, 以下敘述可取 s1 物件的目前容量; 並將其容量設定為 20 。此外, 需注意在設定容量大小時, 不得小於目前字串的長度。
Length 取得或設定此執行個體的字串長度。例如, 以下敘述可取得 s2 物件的長度。 結果是 3。 此外, 在設定長度時, 若指定長度小於目前長度, 則此執行個體將被截斷為指定長度。例如, 以下敘述將 s2 的長度設定為 2, 則原本長度為 3 的 s2物件, 其最後一個字元'c' 將被截掉。 結果是 ab 。
實例方法 Append 將指定字元或字串加到原字串尾端。共有 19 種多載, 以下僅介紹 2 種常用的多載, 分別說明如下: public StringBuilder Append(char); 將指定字元加到原字串的尾端。例如, 以下敘述可將字元'd'加到 s3 物 件的尾端。 結果是 abcd 。
public StringBuilder Append(string); 將指定字串加到原字串的尾端。例如, 以下敘述可將 s4 物件的字串內 容加到 s3 物件的尾端。 結果是 abcdxyz 。
Equals 判斷兩 StringBuilder 類別物件是否相等。其語法如下: 例如, 以下敘述可判斷 s4 與 s5 兩 StringBuilder 物件是否相等 結果是 True 。
Insert 將指定字串插入此執行個體的指定字元位置, 共有 18 種多載, 可插入不同型別的字串值, 以下僅介紹其中一種多載, 其語法如下: 例如, 以下敘述可將字串"abc"插入 s5 的第 0 個索引位置。 結果是 abcxyz 。
Remove 將指定數目的字元, 由此執行個體的指定起始位置刪除。其語法如下: 例如, 以下敘述從 s5 的第一個字元位置起刪除 3 個字元。 結果是 xyz。
Replace 以指定字元或字串, 取代此執行個體中符合該字元或字串的所有項目,共有 4 種多載, 在此僅介紹 2 種常用的多載, 分別說明如下: public StringBuilder Replace(char, char); 其語法如下: 以 newChar 取代此執行個體中符合 oldChar 的所有字元。例如, 以下敘述將以一新字元'a' 取代 s5 執行個體中的舊字元'x' 。 結果是 ayz。
public StringBuilder Replace(string, string); 其語法如下: 以字串 newValue 取代此執行個體中符合 oldValue 的所有字串。例如,以下敘述將以新字串"eed"取代 s6 執行個體中的舊字串"ess" 。 結果是 succeed 。
ToString 將 StringBuilder 類別的執行個體轉換成 String 類別, 然後傳回一個 String類別的字串, 原本執行個體的型別並未改變。其語法如下: 例如, 以下敘述可將 s6 的內容轉為 String 類別, 然後傳回一 String 類別的字串, 並指定給 String 類別的物件 s7, 原本 s6 的型別仍為 StringBuilder。
1 0 - 3 綜合範例 範例 10-3a 有一種遊戲為幾 A 幾 B 的猜數字遊戲, 兩個人對玩, 互相猜對方預先 寫下的四位數 (四位數中的阿拉伯數字不可重覆), 若所猜的數字與對方位 置相同者為 A, 數字相同, 位置不對, 則稱為 B 。例如對方預寫的數字為 6713, 若猜 6731 則應回應 2A2B, 若猜 7851 則回應 0A2B。試寫一程式, 電 腦自動產生四位數的亂數, 再讓使用者猜的一種遊戲程式。(電腦應逐一回 應使用者已猜的狀況) 設計步驟 1. 表單配置如下圖: (1) 使用一個 Label 元件, 其 name 為 1b1Out, 用於輸出電腦所回應的 AB 數目。
(2) 使用一個 TextBox 元件, 其 name 為 txtIn, 用於輸入使用者所臆測的數字。
2. 程式執行時, 電腦產生四位數的亂數, 所以程式撰寫如下:
3. 當使用者鍵入數字時, 電腦應回應 AB 數, 所以程式撰寫如下, 其中變數 d 於 class Form1 中宣告, 所以可流通於各事件。
執行結果 1. 下圖左為程式執行的初始畫面, 電腦已產生四位數的亂數 7514, 如下圖左。(要實際玩此遊戲時, 當然不能印出此數字) 2. 下圖右為使用者臆測 4208, 電腦回應 0A1B 的畫面。