.net column
.NET開発者のためのブログメディア

文字

C#のContainsメソッドの使い方|IndexOfの使い方も解説

2020年04月13日
PG
C#の文字列検索の方法ってどんなものがあるんですか?
PL
いくつかパターンがあるので、コードを見ながら紹介していきますね。

C#の文字列検索とは


文字列操作において、特定の文字列を検索したい場面はよくあります。検索方法にもいくつか種類があり、C#をはじめとして各種言語においても、汎用メソッドが用意されているほどです。データ処理の基本となるので、確実に覚えておきたい内容の一つでしょう。

C#のContainsメソッドの使い方5つ

文字列や配列、コレクションに指定文字列が含まれるかを調べるために、C#ではContainsメソッドを使用します。
ここでは以下の5つの使い方をC#で示しています。
・文字列に指定文字列が含まれるかどうかを調べます。
・文字列からなるListに指定文字列が含まれるかどうかを調べます。
・文字列からなるListに複数の指定文字列が含まれるかどうかを調べます。
・Linqを使用して文字列からなる配列に指定文字列が含まれるかどうかを調べます。
・IEqualityComparerを実装して比較規則を実装した例を確認します。

1:文字列内に指定の文字・または文字列が含まれるか確かめる方法

C#のContainsメソッドは、指定した文字列が対象の文字列に含まれているかを確認するためのものです。IndexOfメソッドと違い、指定した位置を返すものではないですが、指定した文字列の存在を確認したいだけならこれで十分でしょう。このメソッドはString型とList型で利用できますが、配列型には使用できませんので注意が必要です。(LinqのContainsメソッドを使って行うことは可能)

実行結果

このコードでは、指定した文字列内に検索対象の文字列が含まれているかを返します。

2:Listに指定した要素が含まれるか確かめる方法

Listのコレクションには標準でContainsメソッドが存在します。以下にC#で文字列のListに指定文字列が含まれるかを確かめる例を示します。

実行結果

3:複数のキーワードが含まれるか確かめる方法

ListのContainsメソッドでは一つのキーワードのみが指定できます。ContainsメソッドをANDやORで連結することにより、複数のキーワードが含まれるかの確認ができます。

ANDを使う場合

ListのContainsメソッドでは一つのキーワードのみが指定できます。ANDで連結することにより、複数のキーワードが含まれるかの確認ができます。以下にC#による例を示します。

実行結果

ORを使う場合

ListのContainsメソッドでは一つのキーワードのみが指定できます。ORで連結することにより、複数のキーワードが含まれるかの確認ができます。以下にC#による例を示します。

実行結果

4:LINQやIEqualityComparerを使用する場合の使い方

配列は標準ではContainsメソッドが存在しませんが、Linqを使用することにより拡張メソッドとして使用することができます。

IEqualityComparerインターフェースとはコレクションに対してカスタマイズした等価比較を実装するときに使用します。

大文字・小文字を考慮しない文字列の比較や作成したクラスの配列の比較などのクラスをC#で実装し、Containsメソッドの比較規則として使用できます。

1:配列に指定した要素が含まれるか確かめる方法

配列は標準ではContainsメソッドは使用できませんが、Linqを使用することにより拡張メソッドとして使用できます。
以下にC#で配列に対してContainsを使用した例を示します。

実行結果

2:配列に指定した要素が含まれるかをIEqualityComparerを使用して確かめる方法

IEqualityComparerインターフェースを実装したクラスを作成することにより、Containsメソッドが拡張できます。
以下に文字列を小文字に変換した後に比較するクラスをC#で実装した例を示します。

実行結果

以下にPersonクラスの配列に指定したPersonが含まれるかを確認するクラスをC#で実装した例を示します。

class Person { public int Id; public string Name; public override string ToString() { return string.Format(“Id:{0}, Name:{1}”, Id, Name); } } ///

class PersonComparer : IEqualityComparer<Person> { public bool Equals(Person x, Person y) { if (x.Id == y.Id && x.Name == y.Name) { return true; } return false; } public int GetHashCode(Person obj) { return obj.Id; } } }

実行結果

C#で正規表現にマッチする文字列が含まれているか検索するには?

C#で文字列が含まれているかを検索するにはRegexクラスで正規表現を使用して行うことが可能です。正規表現を使用することにより、検索対象の文字列を柔軟に指定することが可能となります。

正規表現を使いこなして汎用性の高い検索ができる

文字列検索を行う上では、正規表現を使いこなすことが重要になります。より汎用性の高い検索をする場合には、指定した文字列の完全一致、部分一致だけでは不十分なケースも出てくるほか、煩雑な処理になってしまうこともあるでしょう。正規表現はそれを解消できる手段になるので、検索条件が複雑になってしまう場合には、積極的に取り入れていくのがおすすめです。

Regexクラスの使い方

Regexクラスで正規表現を使用して指定文字列が含まれているかを検索する例をC#で示します。

実行結果

IndexOfメソッドの使い方

IndexOfメソッドは、対象となる文字列内に指定した文字列が何番目にあるのかを返します。該当する文字列が複数ある場合には、最初に該当する文字列のものが対象です。引数が検索対象文字列一つの場合は、先頭から最初に見つかった文字の位置を返す仕様で、省略可能な第二引数をint型nで指定すると、n番目に見つかった文字の位置を返します。また、このメソッドは、String型のほか、List型、配列型にも使用可能です。

文字列内に含まれている該当文字列位置を検索1

実行結果

このコードでは、対象文字列が検索対象文字列のどの位置にあるかを番号で返します。
(配列などと同じく、開始番号は0からで見つからない場合は-1が返ります。)

文字列内に含まれている該当文字列位置を検索2

実行結果

このコードでは、検索対象文字列が複数含まれている場合に、その対象文字が3番目にあたる部分がどの位置にあるかを返しています。

PG
汎用メソッドを使って簡単に検索できるんですね。
PL
複雑な検索条件の場合には正規表現も使えるので、いろいろ試してみると良いですよ。

C#のContainsの使い方を覚えよう

ここまでC#でContainsメソッドを使用する例を取り上げてきました。実務でプログラムを作成するときには、文字列や配列、コレクションに対して特定の文字列の検索という処理が現れることが多くなります。

ぜひ実際に動かしてみてください。


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)

Search

Popular

reccomended

Categories

Tags