C#で文字列に文字が含まれているかどうか調べる
C#で、文字列に特定の文字または特定の文字列が含まれているかどうか調べてみます。
目次
手順
String.Indexof()メソッドを使って、文字列内での文字の位置を調べます。戻り値が-1なら存在せず、戻り値が0以上であればその位置に文字が存在するということになります。
String.Indexof()メソッド
指定された文字列が、対象となる文字列オブジェクトの中で最初に見つかった位置のインデックス値を返すメソッドです。インデックス値は0から始まります。
int32 pos = str.IndexOf(value);
変数 |
型 |
内容 |
---|---|---|
str |
string |
検索対象となる文字列 |
value |
string |
検索文字列 |
戻り値はint32です。検索対象文字列の中に検索文字列が見つからない場合は、-1が返されます。
試してみた
下記の文字列に対して、いろいろ検索してみました。
あいうえおabcdeかきくけこ\nさしすせそタチツテト
この文字列のインデックス値はこの表のようになっています。
インデックス |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
---|---|---|---|---|---|---|---|---|---|---|
文字 |
あ |
い |
う |
え |
お |
a |
b |
c |
d |
e |
インデックス |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
---|---|---|---|---|---|---|---|---|---|---|
文字 |
か |
き |
く |
け |
こ |
\n |
さ |
し |
す |
せ |
インデックス |
20 |
21 |
22 |
23 |
24 |
25 |
---|---|---|---|---|---|---|
文字 |
そ |
タ |
チ |
ツ |
テ |
ト |
コード
using System;
namespace trial_indexof
{
class Program
{
static void Main(string[] args)
{
string str = "あいうえおabcdeかきくけこ\nさしすせそタチツテト";
int position = -2;
Console.WriteLine(str);
position = str.IndexOf("い");
Console.WriteLine("い:" + position.ToString());
position = str.IndexOf("b");
Console.WriteLine("b:" + position.ToString());
position = str.IndexOf("B");
Console.WriteLine("B:" + position.ToString());
position = str.IndexOf("き");
Console.WriteLine("き:" + position.ToString());
position = str.IndexOf("\n");
Console.WriteLine("\\n:" + position.ToString());
position = str.IndexOf("し");
Console.WriteLine("し:" + position.ToString());
position = str.IndexOf("た");
Console.WriteLine("た:" + position.ToString());
position = str.IndexOf("タ");
Console.WriteLine("タ:" + position.ToString());
position = str.IndexOf("タ");
Console.WriteLine("タ:" + position.ToString());
position = str.IndexOf("うえお");
Console.WriteLine("うえお:" + position.ToString());
position = str.IndexOf("いあ");
Console.WriteLine("いあ:" + position.ToString());
}
}
}
コンソールにIndexOfの結果を表示するだけの単純なものです。
実行結果
上記のコードをビルドして、コンソールで実行してみました。 ユニコードで処理されていますので、いわゆる2バイト文字とか1バイト文字とかは関係なくインデックスが返ってきています。 例えば、「b」のインデックスは6ですし、「き」のインデックスは11になっています。 改行コードも1文字としてカウントされています。 いわゆる半角カナも1文字としてカウントされていますね。 英字の大文字と小文字、および全角カナと半角カナは、それぞれ別の文字として扱われています。 文字列を検索した場合は、検索文字列の最初の文字が一致する位置のインデックスが返ってきています。 文字や文字列が存在しない場合は、-1が返ってきています。 String.IndexOf()の戻り値を使って、if文などで振り分ければ良いわけですね。
公開日
広告