CodeGym /課程 /C# SELF /string 類的主要方法

string 類的主要方法

C# SELF
等級 9 , 課堂 3
開放

1. 前言

實務上最常遇到的字串任務大概有這幾種:

  • 取得字串長度(還有判斷是不是空的)。
  • 改變字母大小寫(全部變大寫或全部變小寫)。
  • 找看看字串裡有沒有某個單字或符號。
  • 把「不雅字」換成比較禮貌的詞。
  • 用分隔符號把字串切開(像是「電話清單用逗號分開」)。
  • 去掉字串開頭和結尾的空白。
  • 擷取字串的一部分(例如姓氏前三個字母)。
  • 比較兩個字串——不管大小寫有沒有一樣。

針對這些需求,string 類都有對應的方法。

重點方法表格

操作 方法/屬性 範例
字串長度
Length
name.Length
第一個字元
[0]
name[0]
最後一個字元
[name.Length - 1]
name[name.Length - 1]
轉小寫
ToLower()
name.ToLower()
轉大寫
ToUpper()
name.ToUpper()
檢查有沒有子字串
Contains()
name.Contains("Иван")
子字串位置
IndexOf()
name.IndexOf("а")
擷取部分字串
Substring()
name.Substring(1, 3)
比較字串
Equals(), ==
name.Equals("Петр")
去除空白
Trim()
name.Trim()
用分隔符切割
Split()
csv.Split(',')
把陣列合併成字串
string.Join()
string.Join("-", array)
取代部分內容
Replace()
text.Replace("старое", "новое")
空字串?
IsNullOrEmpty()
string.IsNullOrEmpty(name)

今天我們會挑幾個來細講。

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 個」。

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION