C#のStringでの文字列検索は、二つある。 (C#2.0以降)
一つは、以前から使われほかのプログラム言語でもお目にかかる、IndexOfでヒットした文字列の先頭位置を返すもの。
Hellowでellを探すと、1が帰る。なかったら-1が帰る。
もう一つは、C#2.0で追加された、Contains 。
こちらは、文字列があるか無いかでtrueかfalseを返す。
Containsの内部的にはIndexOfと同じことをしているので、下記のように同じ動作が可能。
String str = "Hellow"; String word = "ell"; if (str.IndexOf(word) > -1) { MessageBox.Show("Hit"); } if (str.Contains(word)) { MessageBox.Show("Hit"); }
検索した文字列から、Substring等で文字列を加工する場合には、IndexOfが必要だが、単純な条件分岐としては、Containsを使用したほうが、間違いも少なくコード的にも読みやすい気がする。Contains = 含む だしね。
なお、どちらも検索文字列に””と空文字を指定すると、先頭に空文字を発見したとしてIndexOfなら0、Containsならtrueを返す。
検索文字列に””が入ると、予期せぬ行動を起こすバグの元になりかねない。
(CSVファイル等の特定文字で分割したものを切ったものから検索とか・・)
なので、検索文字が空文字かどうか等を判断する処理String.IsNullOrEmptyかString.IsNullOrWhiteSpace等を入れたほうがよいかもしれない。
if (string.IsNullOrWhiteSpace(word) ? false : str.Contains(word)) { MessageBox.Show("Hit"); }
他にも、Containsと似た感じで、StartsWithとEndsWithというのがあり、指定した文字列で始まるか、指定した文字列で終わるかが、boolで帰るので、状況によっては便利かも。
たとえば、ファイル一覧から拡張子でヒットするものを探すとか?