文字列の検索

文字列

検索1 存在するか?存在しないか?(Contains)

指定した文字列が検索対象の文字列内に存在するかどうかをtrueまたはfalseで返します。

string target = this.TargetTextBox.Text;
string find = this.FindTextbox.Text;

if (target.Contains(find) == true)
{
    this.ContainsTextBox.Text = "含む";
} else {
    this.ContainsTextBox.Text = "含まない";
}

実行結果

検索2 文字列が何番目に存在するか?(IndexOf, LastIndexOf)

指定した文字列が検索対象の文字列内の何番目に存在するか数値で返します。

string target = this.TargetTextBox.Text;
string find = this.FindTextbox.Text;

int first = target.IndexOf(find);       //先頭から検索
int last = target.LastIndexOf(find);    //後ろから検索

if (first < 0)
{
    this.ContainsTextBox.Text = "含まない";
}
else
{
    this.ContainsTextBox.Text = "含む";
}

this.IndexOfTextbox.Text = first.ToString();       
this.LastIndexOfTextbox.Text = last.ToString();

実行結果

検索3 個数で確認(Split または Replace)

このやり方は、あまり使わないと思います。SplitやReplaceを使って指定文字列の数を出します。0個以上なら存在する。

LinQにCountがありますが数えられるのは半角1文字(char)単位です。今回は省きます。

string target = this.TargetTextBox.Text;
string find = this.FindTextbox.Text;

//Splitを使った方法
int count = (target.Split(new string[] { find }, StringSplitOptions.None).Count() - 1);
//Replaceを使った方法
//int count = (target.Length - target.Replace(find, "").Length) / find.Length;

if (count > 0)
{
    this.ContainsTextBox.Text = "含む";
}
else
{
    this.ContainsTextBox.Text = "含まない";
}

this.CountTextbox.Text = count.ToString();

実行結果

文字列の中にある検索文字列の位置をすべて取得する関数を考えました。

対象文字列の中に検索文字列がどこにあるかすべて取得できるようにしました。

関数

/// <summary>
/// 対象文字列の中に検索文字列がどこにあるかすべて取得する
/// </summary>
/// <param name="target">対象文字列</param>
/// <param name="find">検索ワード</param>
/// <returns>検索文字の位置</returns>
private int[] FindStringIndices(string target, string find)
{
    List<int> index_list = new List<int>();

    //targetが空なら抜ける
    if (string.IsNullOrEmpty(target) == true) return index_list.ToArray();

    //findsが空なら抜ける
    if (string.IsNullOrEmpty(find) == true) return index_list.ToArray();

    //検索処理
    int index = 0;
    while ((index = target.IndexOf(find, index)) >= 0)
    {
        index_list.Add(index);

        index++;
    }

    return index_list.ToArray();
}

使用例

private void FindStringButton_Click(object sender, EventArgs e)
{
    string target = this.TargetTextBox.Text;
    string find = this.FindTextbox.Text;

    int first = target.IndexOf(find);       //先頭から検索
    int last = target.LastIndexOf(find);    //後ろから検索

    this.IndexOfTextbox.Text = first.ToString();       
    this.LastIndexOfTextbox.Text = last.ToString();

    //位置を取得
    int[] indices = FindStringIndices(target, find);

    MessageBox.Show(String.Join(",", indices));

}

実行結果

まとめ

文字列での検索でこの記事が皆様のお役に立てたなら幸いです。

コメント

タイトルとURLをコピーしました