C#でString.Containsをマスターするための8つのステップ

C#プログラミングの基本、String.Containsメソッドを使ったテキスト検索のイメージC#
この記事は約15分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

プログラミングにおいて、文字列の操作は基本中の基本です。

特に、ある文字列が別の文字列に含まれているかどうかを判定する機能は、多くのプログラムで不可欠です。

C#言語におけるString.Containsメソッドは、このような状況で頼りになるツールの一つです。

この記事では、String.Containsメソッドの基本から応用まで、ステップバイステップで解説していきます。

C#をこれから学び始める方や、既にある程度経験がある方でも、この記事を読むことで、String.Containsメソッドの使い方を深く理解し、より効率的に文字列操作を行うことができるようになります。

プログラミング初心者にとって、文字列操作は少し複雑に感じるかもしれません。

しかし、基本的なメソッドの一つ一つを理解し、それを実際のコードで試すことで、徐々に自信を持ってプログラミングができるようになります。

この記事では、String.Containsメソッドに焦点を当て、その機能を詳細に解説していきます。

プログラミングにおける文字列操作の理解を深めるための一歩として、ぜひこの記事をお役立てください。

●C#のString.Containsメソッドとは?

C#言語におけるString.Containsメソッドは、指定された文字列が別の文字列に含まれているかどうかを判断するメソッドです。

このメソッドは、System.Stringクラスの一部として提供されており、文字列操作の際に非常に便利です。

String.Containsメソッドは、ある文字列(ターゲット文字列)が別の文字列(検索文字列)に含まれているかどうかを判断し、真偽値(trueまたはfalse)を返します。

例えば、ユーザーからの入力をチェックする際や、特定のキーワードが文書に含まれているかを調べる際など、様々なシチュエーションでString.Containsメソッドは役立ちます。

特に、大規模なテキスト処理を行う際には、このメソッドを使用することで、効率的かつ簡単に目的の文字列を見つけ出すことができます。

○String.Containsメソッドの基本

String.Containsメソッドを使用する基本的な方法は非常にシンプルです。

まず、検索対象となる文字列(ターゲット文字列)と、その中で検索したい文字列(検索文字列)を準備します。

次に、ターゲット文字列に対してContainsメソッドを呼び出し、検索文字列を引数として渡します。

メソッドは、検索文字列がターゲット文字列内に存在するかどうかを判断し、結果として真偽値(trueまたはfalse)を返します。

このメソッドの重要な特徴の一つは、大文字と小文字を区別する点です。

つまり、String.Containsメソッドは、大文字と小文字を別の文字として扱います。

例えば、"Hello World"という文字列に対して"hello"を検索すると、結果はfalseになります。

これは、大文字のHと小文字のhが異なる文字として扱われるためです。

この挙動は、特に大文字と小文字を区別する必要がある場面で非常に有用です。

一方で、大文字と小文字を区別せずに検索を行いたい場合には、いくつかの方法があります。

例えば、ターゲット文字列と検索文字列の両方を小文字または大文字に変換してからContainsメソッドを使用する方法があります。

これにより、大文字と小文字を区別せずに文字列検索を行うことが可能になります。

●String.Containsメソッドの使い方

C#プログラミングにおけるString.Containsメソッドの使用方法は非常に簡単です。

基本的な使い方としては、対象となる文字列(ターゲット文字列)の中に特定の文字列(サブ文字列)が含まれているかどうかを確認します。

このメソッドは、サブ文字列がターゲット文字列に存在する場合にtrueを、存在しない場合にはfalseを返します。

これにより、プログラマーは特定の条件に基づいて処理を分岐させることができます。

例えば、ある文字列がユーザーの入力として与えられた場合、その文字列に特定のキーワードが含まれているかどうかをチェックし、その結果に基づいて次の処理を行うというシナリオが考えられます。

このようにString.Containsメソッドは、文字列処理における基本的かつ強力なツールとして機能します。

○サンプルコード1:単語の存在チェック

ここでは、String.Containsメソッドを使用して、ある単語が文字列に含まれているかどうかをチェックする基本的な例を紹介します。

下記のサンプルコードでは、「Hello World」という文字列の中に「World」という単語が含まれているかを確認しています。

string targetString = "Hello World";
string substring = "World";

bool containsSubstring = targetString.Contains(substring);

if (containsSubstring)
{
    Console.WriteLine("文字列は指定された単語を含んでいます。");
}
else
{
    Console.WriteLine("文字列は指定された単語を含んでいません。");
}

このコードを実行すると、「文字列は指定された単語を含んでいます。」というメッセージが表示されます。

これは、targetStringsubstringが含まれているため、containsSubstringtrueと評価されるからです。

○サンプルコード2:大文字と小文字を区別しない検索

String.Containsメソッドはデフォルトで大文字と小文字を区別します。

しかし、時には大文字と小文字を区別せずに検索を行いたい場合もあります。

このような場合は、文字列を統一したケース(例えばすべて小文字や大文字)に変換してからContainsメソッドを使用します。

下記のサンプルコードでは、「Hello World」という文字列の中に「world」という単語が大文字小文字を区別せずに含まれているかを確認しています。

string targetString = "Hello World";
string substring = "world";

bool containsSubstring = targetString.ToLower().Contains(substring.ToLower());

if (containsSubstring)
{
    Console.WriteLine("文字列は指定された単語を含んでいます(大文字小文字を区別せず)。");
}
else
{
    Console.WriteLine("文字列は指定された単語を含んでいません(大文字小文字を区別せず)。");
}

このコードでは、targetStringsubstringの両方を.ToLower()メソッドで小文字に変換しています。

これにより、大文字小文字を区別せずに検索を行うことができ、結果として「文字列は指定された単語を含んでいます(大文字小文字を区別せず)。」というメッセージが表示されます。

●String.Containsメソッドの応用例

String.Containsメソッドは、基本的な文字列検索を超えて、さまざまな応用例で活用することができます。

複数の条件を組み合わせた検索や、特定の条件に基づいて文字列をフィルタリングする際に、このメソッドは非常に有効です。

例えば、特定のキーワードリストが含まれているかどうかを確認する場合や、特定の形式の文字列を探す際にString.Containsメソッドを使うことができます。

このような応用例では、String.Containsメソッドをループや条件分岐と組み合わせて使用し、より複雑な文字列処理を実現することが可能です。

次に、いくつかの具体的な応用例とそのサンプルコードを見ていきましょう。

○サンプルコード3:複数の条件を組み合わせた検索

複数のキーワードが特定の文字列に含まれているかどうかを確認する場合、String.Containsメソッドを使ってそれぞれのキーワードに対して検索を行い、その結果を組み合わせることができます。

下記のサンプルコードでは、「Hello World」の文字列に「Hello」と「World」という両方のキーワードが含まれているかをチェックしています。

string targetString = "Hello World";
string keyword1 = "Hello";
string keyword2 = "World";

bool containsKeyword1 = targetString.Contains(keyword1);
bool containsKeyword2 = targetString.Contains(keyword2);

if (containsKeyword1 && containsKeyword2)
{
    Console.WriteLine("文字列は両方のキーワードを含んでいます。");
}
else
{
    Console.WriteLine("文字列は一部のキーワードのみ、またはどちらのキーワードも含んでいません。");
}

このコードでは、targetStringkeyword1keyword2の両方を含んでいる場合にのみ、特定のメッセージが表示されます。

○サンプルコード4:文字列のフィルタリング

String.Containsメソッドを利用して、特定の条件に基づいて文字列のリストをフィルタリングすることもできます。

下記のサンプルコードでは、文字列のリストから特定のキーワードを含む文字列のみを選択しています。

List<string> strings = new List<string> { "Apple", "Banana", "Cherry", "Date" };
string keyword = "a"; // 小文字の「a」を含む文字列を探す

List<string> filteredStrings = strings.Where(s => s.ToLower().Contains(keyword)).ToList();

foreach (var str in filteredStrings)
{
    Console.WriteLine(str);
}

このコードでは、stringsリスト内の各文字列を小文字に変換し、小文字の「a」を含むものを選択しています。

フィルタリングされた結果のリストfilteredStringsは、「Apple」と「Banana」という文字列を含むことになります。

このようにString.Containsメソッドを使うと、柔軟かつ効率的に文字列のフィルタリングが行えます。

●String.Containsメソッドを活用する上での注意点

String.Containsメソッドを使用する際にはいくつか注意点があります。

これらの点を理解し、適切に対応することで、より効率的かつ正確に文字列処理を行うことができます。

ここでは、String.Containsメソッドの使用における主要な注意点について説明します。

○文字エンコーディングに関する注意

String.Containsメソッドを使用する際、文字エンコーディングは重要な要素です。

C#では、文字列はUnicodeでエンコードされていますが、アプリケーションによっては異なるエンコーディング形式を使用することがあります。

例えば、外部システムからのデータを扱う場合、そのデータがASCIIやUTF-8など、異なるエンコーディングで記述されている可能性があります。

異なるエンコーディング形式の文字列を処理する際は、一貫したエンコーディングに変換することが重要です。

異なるエンコーディングを持つ文字列では、同じ文字でも異なるバイト表現を持つため、String.Containsメソッドの結果が期待通りにならないことがあります。

したがって、エンコーディングを適切に管理し、必要に応じて文字列のエンコーディングを変換することが重要です。

○性能への影響を考慮する

String.Containsメソッドは、基本的に効率的な文字列検索を提供しますが、大量のデータや複雑な文字列処理を行う場合には、性能への影響を考慮する必要があります。

特に、大きな文字列や多数の文字列に対してContainsメソッドを繰り返し呼び出す場合、アプリケーションのパフォーマンスに影響を与える可能性があります。

性能の問題を避けるためには、必要な検索処理を効率的に行う方法を考えることが重要です。

例えば、複数の文字列を検索する場合は、文字列のリストを事前にソートして二分探索を行う、正規表現を利用する、または特定のアルゴリズム(例:KMPアルゴリズム)を使用するなどの方法が考えられます。

また、大規模なデータセットに対して検索を行う場合は、並列処理や非同期処理を利用することで、全体的な処理時間を短縮することができます。

これらの方法を適切に活用することで、String.Containsメソッドを用いた文字列処理の効率を向上させることが可能です。

●カスタマイズと最適化

String.Containsメソッドの効率性と使い勝手をさらに高めるために、カスタマイズと最適化の手法を採用することができます。

これらの手法を利用することで、特定のニーズやシナリオに合わせた文字列検索機能を実装することが可能になります。

ここでは、カスタムメソッドの作成と拡張メソッドの使用に焦点を当てて、それぞれのアプローチについて詳しく解説します。

○サンプルコード5:カスタムメソッドの作成

特定のシナリオに合わせてString.Containsメソッドの挙動を変更したい場合、カスタムメソッドを作成することが一つの解決策です。

例えば、大文字小文字を区別せずに文字列を検索するカスタムメソッドを作成することができます。

下記のサンプルコードでは、そのようなカスタムメソッドを実装しています。

public static bool ContainsIgnoreCase(string source, string toCheck)
{
    return source?.IndexOf(toCheck, StringComparison.OrdinalIgnoreCase) >= 0;
}

// 使用例
string targetString = "Hello World";
string substring = "world";

bool containsSubstring = ContainsIgnoreCase(targetString, substring);

Console.WriteLine(containsSubstring ? "含まれています。" : "含まれていません。");

このカスタムメソッドContainsIgnoreCaseは、大文字小文字を区別せずにsource文字列内にtoCheck文字列が含まれているかどうかをチェックします。

このようにカスタムメソッドを作成することで、標準のString.Containsメソッドにはない柔軟性と機能を提供することができます。

○サンプルコード6:拡張メソッドの使用

C#では、拡張メソッドを使用して既存の型に新しいメソッドを「追加」することができます。

これにより、Stringクラスにカスタムの文字列検索機能を組み込むことが可能になります。

下記のサンプルコードでは、Stringクラスに大文字小文字を区別せずに特定の文字列を検索する拡張メソッドを追加しています。

public static class StringExtensions
{
    public static bool ContainsWithIgnoreCase(this string source, string toCheck)
    {
        return source?.IndexOf(toCheck, StringComparison.OrdinalIgnoreCase) >= 0;
    }
}

// 使用例
string targetString = "Hello World";
string substring = "world";

bool containsSubstring = targetString.ContainsWithIgnoreCase(substring);

Console.WriteLine(containsSubstring ? "含まれています。" : "含まれていません。");

このContainsWithIgnoreCase拡張メソッドは、任意の文字列に対して大文字小文字を区別せずに検索を行う機能を提供します。

拡張メソッドを利用することで、標準のStringメソッドにカスタム機能を追加し、より高度な文字列処理を簡単に実装することができます。

●String.Containsメソッドと他の文字列メソッドの比較

String.Containsメソッドは多くの場面で便利ですが、他の文字列メソッドと比較した場合、それぞれに特有の利点と制限があります。

ここでは、String.Containsメソッドと他の2つの一般的な文字列メソッド、IndexOfRegexを使った検索、との比較を行います。

これにより、各メソッドの適切な使用シナリオを理解し、最も効率的な文字列操作を選択するのに役立ちます。

○IndexOfとの比較

IndexOfメソッドは、指定された文字列が最初に出現するインデックスを返します。

これに対し、String.Containsは単に文字列が含まれているかどうかの真偽値を返します。

したがって、IndexOfは文字列が見つかった場所の具体的な位置を知る必要がある場合に適しています。

例えば、特定の文字列の後に続くテキストを抽出する必要がある場合などです。

一方、String.Containsは文字列の存在のみをチェックするため、位置情報は提供しませんが、その分実装がシンプルになります。

○Regexを使った検索との比較

Regex(正規表現)を使用した検索は、String.Containsメソッドよりもはるかに柔軟性が高いです。

Regexを使うと、パターンマッチングを使用して複雑な文字列検索や置換を行うことができます。

これは、単純な文字列検索を超えて、特定のパターン(例えばメールアドレスや電話番号の形式)を持つ文字列を検索する場合に特に有効です。

ただし、Regexの使用はString.Containsよりも複雑で、パフォーマンスに影響を与える可能性があります。

そのため、シンプルな文字列の存在確認が必要な場合はString.Containsを、より複雑なパターンマッチングが必要な場合はRegexを選択するのが一般的です。

これらの比較を通じて、C#における文字列処理のさまざまな手法の中から、目的に最も適した方法を選択するための理解が深まります。

適切なメソッドを使用することで、コードの効率性、読みやすさ、メンテナンスの容易さが向上します。

まとめ

この記事では、C#におけるString.Containsメソッドの基本的な使い方から応用例、さらにはカスタマイズと最適化の方法までを詳細に解説しました。

String.Containsメソッドは、文字列内で特定の文字列が存在するかどうかを確認する際に非常に便利なツールです。

このメソッドの簡潔さと効率性は、多くのプログラミングシナリオで重宝されます。

String.Containsメソッドを用いた文字列処理は、C#プログラミングにおいて基本的なスキルの一つであり、その効果的な使用はプログラマーの能力を大きく広げることができます。

この記事が、C#における文字列操作の理解を深め、より効果的なプログラミングを行うための一助となることを願っています。