1. 前言
實務上最常遇到的字串任務大概有這幾種:
- 取得字串長度(還有判斷是不是空的)。
- 改變字母大小寫(全部變大寫或全部變小寫)。
- 找看看字串裡有沒有某個單字或符號。
- 把「不雅字」換成比較禮貌的詞。
- 用分隔符號把字串切開(像是「電話清單用逗號分開」)。
- 去掉字串開頭和結尾的空白。
- 擷取字串的一部分(例如姓氏前三個字母)。
- 比較兩個字串——不管大小寫有沒有一樣。
針對這些需求,string 類都有對應的方法。
重點方法表格
| 操作 | 方法/屬性 | 範例 |
|---|---|---|
| 字串長度 | |
|
| 第一個字元 | |
|
| 最後一個字元 | |
|
| 轉小寫 | |
|
| 轉大寫 | |
|
| 檢查有沒有子字串 | |
|
| 子字串位置 | |
|
| 擷取部分字串 | |
|
| 比較字串 | |
|
| 去除空白 | |
|
| 用分隔符切割 | |
|
| 把陣列合併成字串 | |
|
| 取代部分內容 | |
|
| 空字串? | |
|
今天我們會挑幾個來細講。
2. 把字串當陣列用
字串長度:屬性 Length
最簡單的就是看字串有幾個字元。直接用 Length 屬性就好。範例:
string name = "Аркадий";
Console.WriteLine(name.Length); // 會印出:7
- Length 是 屬性(不是方法),所以不用括號。
- 如果字串是空的(""),長度就是 0。
有時候在做「危險」操作(像是擷取子字串)前,先檢查長度會比較保險。
用索引拿字元:索引子 [i]
跟陣列一樣:字串就是字元陣列。範例:
string hello = "Привет";
char firstChar = hello[0]; // 'П'
char lastChar = hello[^1]; // 'т'
Console.WriteLine(firstChar);
- 索引從 0 開始!
- 要小心:如果你用不存在的索引(hello[100]),會丟出例外。
3. 比較字串
字串運算子 == 和 !=
在 C# 裡這些運算子就是直接比內容。
string word1 = "Hello";
string word2 = "Hello";
bool areEqual = word1 == word2; // true
方法 Equals
跟 == 不一樣,Equals 可以加參數。像是比字串時不管大小寫——"Мама" == "мама" 也等於 "МАМА"。範例:
string pass1 = "Qwerty";
string pass2 = "qwerty";
// 標準比較(有分大小寫)
bool isSame = pass1.Equals(pass2); // false
// 不分大小寫
bool ignoreCase = pass1.Equals(pass2, StringComparison.OrdinalIgnoreCase); // true
4. 轉換大小寫
要把字串變成全大寫(或全小寫),string 類有兩個專用方法:ToLower() 跟 ToUpper()。
想讓用戶看到你的訊息像「重要!」那樣全大寫?或是比對時都先轉小寫?很簡單:
string text = "Мне Не Страшен Серый Волк!";
Console.WriteLine(text.ToUpper()); // МНЕ НЕ СТРАШЕН СЕРЫЙ ВОЛК!
Console.WriteLine(text.ToLower()); // мне не страшен серый волк!
- 注意:原本的字串 不會被改變!
- 可以用來做不分大小寫的比對。
5. 去除多餘空白
如果用戶不小心(或故意,誰知道)在名字前後加了空白?Trim 就派上用場啦!它有三種用法:
- Trim — 去掉字串開頭和結尾所有空白;
- TrimStart — 去掉開頭空白;
- TrimEnd — 去掉結尾空白。
string raw = " Гоша ";
string cleaned = raw.Trim(); // "Гоша"
Console.WriteLine($"[{cleaned}]");
6. 擷取子字串:Substring
有時候只想要字串的一部分。
string word = "Привет";
string part = word.Substring(2); // "ивет"
string part2 = word.Substring(2, 3); // "иве"
- Substring(startIndex) — 從 startIndex 開始到結尾。
- Substring(startIndex, length) — 從 startIndex 開始,取 length 個字元。
注意:如果超出字串範圍或 length < 0,會丟出例外!
7. 檢查字串是不是空的
在用字串(像是插值)之前,最好先檢查它不是 null 也不是空的,不然可能會出錯或得到怪結果。
a) 用 null 運算子 == 檢查
string s = null;
if (s == null)
Console.WriteLine("字串等於 null");
缺點:抓不到空字串("")。
b) 用 string.IsNullOrEmpty() 檢查
可以同時檢查 null 跟空字串:
string s = "";
if (string.IsNullOrEmpty(s))
Console.WriteLine("字串是空的或等於 null");
c) 用 string.IsNullOrWhiteSpace() 檢查
還會把只有空白、tab 或其他「看不到」的字元也算進去:
string s = " ";
if (string.IsNullOrWhiteSpace(s))
Console.WriteLine("字串是空的、null 或只有空白");
8. 操作字串方法時常見錯誤
- 最常見的就是忘了字串 是不可變的(immutable),上面有提過。
- 還有一個常見失誤——忘了搜尋和比較時會分大小寫。
例如用戶輸入 "андрей",但清單裡已經有 "Андрей",如果你直接用 Contains 或 ==,沒先轉成同一個大小寫或用對應的方法,可能就找不到。
還有要注意那些會回傳索引的方法。索引是從 0 開始,如果回傳 -1,代表沒找到,不是「第 0 個」。
GO TO FULL VERSION