文字列内に指定した部分文字列が存在するか判定する - C#

文字列内に指定した部分文字列が存在するか判定するコードを紹介します。

概要

文字列内に部分文字列があるかを判定する場合、通常はIndexOf メソッドを利用します。(IndexOf メソッドの利用はこちらの記事を参照して下さい。)
IndexOfメソッドを利用した場合は文字列内に部分文字列が存在するかの情報と、存在する場合に何文字目に存在するかが取得できます。一方で文字列の存在のみが判定できれば良い場合は、何文字目に存在するかの情報は不要のため、Containsメソッドを利用したほうがシンプルです。また、Containsメソッドの戻り値がbool型のため、if文での利用やラムダ式やLINQで利用できることもメリットです。

利用例 : 通常のコード

UI

下図のUIを作成します。

コード

下記のコードを記述します。[button1]のClickイベントを実装します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace StringContains
{
  public partial class FormSimpleStringContains : Form
  {
    public FormSimpleStringContains()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      string TextStr = "かるがもとぺんぎんが仲良くクッキーを食べています。";

      if (TextStr.Contains("ぺんぎん") == true) {
        textBox1.Text += String.Format("「{0}」 に 「ぺんぎん」は含まれています。", TextStr);
      }
      else {
        textBox1.Text += String.Format("「{0}」 に 「ぺんぎん」は含まれていません。", TextStr);
      }
    }
  }
}

解説

string変数のContains メソッドを呼び出すと文字列中に指定した文字列があるかを判定できます。判定する文字列をContainsメソッドの第一引数に与えます。
今回の例ではTestStr変数の文字列値「かるがもとぺんぎんが仲良くクッキーを食べています。」に「ぺんぎん」の文字が含まれているかを判定し、 含まれている場合にはtrueを、含まれていない場合はfalse を返します。
  if (TextStr.Contains("ぺんぎん") == true) {
  }

実行結果

上記のプロジェクトを実行します。下図のウィンドウが表示されます。l


[button1]をクリックします。

利用例 : LINQ

LINQ で Contains メソッドを利用する例です。

コード

下記のコードを記述します。buttton2 のClickイベントを実装します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace StringContains
{
  public partial class FormSimpleStringContains : Form
  {
    public FormSimpleStringContains()
    {
      InitializeComponent();
    }

    private void button2_Click(object sender, EventArgs e)
    {
      string[] TextStr = new string[5];
      TextStr[0] = "ぺんぎんクッキー";
      TextStr[1] = "かるがもクッキー";
      TextStr[2] = "しろくまアイス";
      TextStr[3] = "ぺんぎんケーキ";
      TextStr[4] = "らくだキャラメル";

      IEnumerable<string> matchItem = from s in TextStr where s.Contains("ぺんぎん") select s;
      foreach (string ss in matchItem) {
        textBox1.Text += ss + "\r\n";
      }
    }
  }
}

解説

stirng型の配列を宣言します。それぞれの要素に文字列を代入します。
  string[] TextStr = new string[5];
  TextStr[0] = "ぺんぎんクッキー";
  TextStr[1] = "かるがもクッキー";
  TextStr[2] = "しろくまアイス";
  TextStr[3] = "ぺんぎんケーキ";
  TextStr[4] = "らくだキャラメル";

LINQ で TextStr変数(string型の配列)で "ぺんぎん" の文字列が含まれる要素を抜き出します。結果は IEnumerable オブジェクトに格納されます。
  IEnumerable<string> matchItem = from s in TextStr where s.Contains("ぺんぎん") select s;

LINQの結果の IEnumerable オブジェクトを foreach ループで取得して要素の値をテキストボックスに表示します。
  foreach (string ss in matchItem) {
    textBox1.Text += ss + "\r\n";
  }

実行結果

プロジェクトを実行しフォームの[button2]ボタンをクリックします。 TextStr 配列に代入した文字列の中で「ぺんぎん」の文字列がある要素がテキストボックスに表示されます。

利用例 : ラムダ式

ラムダ式で Contains メソッドを利用する例です。

コード

下記のコードを記述します。buttton3 のClickイベントを実装します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace StringContains
{
  public partial class FormSimpleStringContains : Form
  {
    public FormSimpleStringContains()
    {
      InitializeComponent();
    }

    private void button3_Click(object sender, EventArgs e)
    {
      string[] TextStr = new string[5];
      TextStr[0] = "ぺんぎんクッキー";
      TextStr[1] = "かるがもクッキー";
      TextStr[2] = "しろくまアイス";
      TextStr[3] = "ぺんぎんケーキ";
      TextStr[4] = "らくだキャラメル";

      IEnumerable<string> matchItem = TextStr.Where(s => s.Contains("ぺんぎん"));
      foreach (string ss in matchItem) {
        textBox1.Text += ss + "\r\n";
      }
    }
  }
}

解説

先のLINQの利用例のデモと同じ処理をラムダ式で記述しています。
Whereメソッド内にラムダ式で判定処理を記述しています。一致する結果がIEnumerable オブジェクトに格納されます。
  IEnumerable<string> matchItem = TextStr.Where(s => s.Contains("ぺんぎん"));

結果の IEnumerable オブジェクトを foreach ループで取得して要素の値をテキストボックスに表示します。
  foreach (string ss in matchItem) {
    textBox1.Text += ss + "\r\n";
  }

実行結果

プロジェクトを実行しフォームの[button3]ボタンをクリックします。 TextStr 配列に代入した文字列の中で「ぺんぎん」の文字列がある要素がテキストボックスに表示されます。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2021-03-16
iPentec all rights reserverd.