文字列を後方から検索する - LastIndexOf による文字列検索

文字列を後方から検索するコードを紹介します。

概要

こちらの記事では、文字列内を検索するコードを紹介しましたが、用途によっては、文字列の後方から検索したい場合があります。この記事では、文字列の後方から検索をするコードを紹介します。
文字列を後方から検索する場合は、stringオブジェクトの LastIndexOf() メソッドを利用します。

プログラム

UI

下図のUIを作成します。シングルラインのTextBoxを2つ、複数行テキストボックスを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 FormSearchPrev : Form
  {
    public FormSearchPrev()
    {
      InitializeComponent();
    }

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

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

解説

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

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

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

実行結果

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


テキストボックスに値を入力します。今回は以下の文字列を入力しました。
  • 検索対象文字列 : リンゴとみかんを購入してリンゴを食べたらリンゴが無くなった
  • 検索文字列 : リンゴ


[Search]ボタンをクリックします。検索対象文字列を後方から検索し、最初に見つかった位置(前方から検索し最後に見つかった位置)のインデックス番号を返します。


LastIndexOf()メソッドは検索対象文字列の末尾から検索するため、一致する文字列が何か所ある場合でも最初に一致した文字列のインデックスを返します。


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