文字列を検索する - IndexOfを利用した文字列の検索 - C#

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

概要

文字列内に文字列が含まれているかを検索する場合は IndexOfメソッドを利用します。
補足
複雑な条件や、ワイルドカードを利用する場合は正規表現を利用した文字列検索を利用します。正規表現を利用した文字列検索はこちらの記事を参照してください。

書式

下記の書式になります。検索文字列がstringオブジェクト内に見つかると、IndexOfメソッドの戻り値に検索文字列が見つかった位置を返します。
(stringオブジェクト).IndexOf((検索文字列));

プログラム

UI

下図のUIを作成します。シングルラインのTextBoxを2つ、マルチラインのTextBoxをひとつ、Buttonを1つ配置します。
"Text"のテキストボックスが"textBox_Text", "Search"のテキストボックスが"textBox_Search", 複数行テキストボックスが"textBox_Output"になります。

コード

下記のコードを記述します。
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 SearchString
{
  public partial class FormSearchNext : Form
  {
    public FormSearchNext()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      string text = textBox_Text.Text;
      string search = textBox_Search.Text;

      int pos = text.IndexOf(search);
      textBox_Output.Text += string.Format("{0:d} 文字目で該当しました。\r\n",pos);
    }
  }
}

解説

  string text = textBox_Text.Text;
  string search = textBox_Search.Text;
入力された検索対象の文字列を"text"変数に、検索文字列を"search"変数に代入します。

  int pos = text.IndexOf(search);
検索対象の文字列のIndexOf()メソッドを呼び出して検索します。メソッドの第一引数に検索文字列を与えます。text文字列内にsearchの文字列が見つかった場合、見つかった位置のインデックスが戻り値で返ります(先頭で一致した場合は0が返ります)。文字列が見つからない場合は-1が返ります。

  textBox_Output.Text += string.Format("{0:d} 文字目で該当しました。\r\n",pos);
検索結果を出力用のテキストボックスに表示します。

実行結果

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


テキストボックスに入力します。今回は以下の文字列を入力しました。
  • 検索対象文字列 "ペンギンとシロクマは友達?かもしれないです。"
  • 検索文字列 "シロクマ"


[Search]ボタンをクリックします。検索対象文字列の6文字目に"シロクマ"が含まれるため、インデックス番号の5が返されます。


検索対象文字列内に一致する文字列がない場合は"-1"が返ります。

補足
文字列の検索は先頭から実行されるため、文字列内に一致する文字列が複数ある場合でも、最初にヒットした文字列が結果として返されます。検索で該当した位置より後方を検索する場合はIndexOfメソッドに第二引数を与えると実現できます。詳しくは、こちらの記事を参照してください。


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