IndexOf() 是 C# 中最常用的字串搜尋方法,用於尋找指定字元或子字串在字串中首次出現的索引位置(從 0 開始計算)。若找不到則回傳 -1。
string str1 = "Hello World";
// 搜尋單一字元
int pos1 = str1.IndexOf('W'); // 回傳 6
// 搜尋子字串
int pos2 = str1.IndexOf("World"); // 回傳 6
// 指定搜尋起始位置
int pos3 = str1.IndexOf('l', 3); // 從索引 3 開始找 'l',回傳 3
// 指定搜尋範圍 (起始索引, 搜尋長度)
int pos4 = str1.IndexOf('l', 3, 5); // 從索引 3 開始往後 5 個字元內找 'l'
char[] targets = { 's', 'c', 'b' };
string text = "acsdfgdfgchacscdsad";
text.IndexOfAny(targets); // 回傳 1 (找到 'c')
text.IndexOfAny(targets, 5); // 從索引 5 開始找,回傳 9
text.IndexOfAny(targets, 5, 3); // 從索引 5 開始找 3 個字元,回傳 9
Substring() 用於從字串中截取指定範圍的子字串。
string a = "aadsfdjkfgklfdglfd";
// 從索引 5 截取到結尾
string sub1 = a.Substring(5); // "djkfgklfdglfd"
// 從索引 0 截取長度 5
string sub2 = a.Substring(0, 5); // "aadsf"
ArgumentOutOfRangeException。Substring 不會修改原字串,字串在 C# 中是不可變的。IndexOf 可實現動態截取(如解析 CSV、URL 參數等)。若需進行複雜模式比對(如驗證 Email、解析 HTML),建議使用 Regex 類別(正則表達式),功能更強大且彈性更高。
| 方法 | 搜尋方向 | 回傳值 | 適用場景 |
|---|---|---|---|
| IndexOf | 前→後 | 首次出現索引 | 單一字元/子字串定位 |
| LastIndexOf | 後→前 | 最後出現索引 | 找最後一個分隔符等 |
| IndexOfAny | 前→後 | 任一字元首次索引 | 多重分隔符判斷 |
| LastIndexOfAny | 後→前 | 任一字元最後索引 | 反向多重分隔符 |