string型変数の末尾の文字を判定する - C#

string型変数の末尾の文字を判定するコードを紹介します。

概要

string型の末尾の文字列を判定する場合には,EndsWith メソッドを利用すると容易に実装できます。

書式

[stringオブジェクト].EndsWith([比較文字])
または
[stringオブジェクト].EndsWith([比較文字列])
[stringオブジェクト].EndsWith([比較文字列], [StringComparison])
[stringオブジェクト].EndsWith([比較文字列], [大文字小文字を区別するか], [比較に利用するCultureInfo])
末尾が一致していた場合には true が返ります。

UI

下図のUIを作成します。テキストボックスを3つ、ボタンを1つ配置します。

コード

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

    private void button1_Click(object sender, EventArgs e)
    {
      string pattern = textBox1.Text;
      string input = textBox2.Text;

      if (input.EndsWith(pattern) == true)
      {
        textBox3.Text = "末尾が一致しました。";
      }
      else
      {
        textBox3.Text = "末尾は一致しませんでした。";
      }
    }
  }
}

解説

テキストボックスの値をstring型の変数に代入します。
  string pattern = textBox1.Text;
  string input = textBox2.Text;

EndsWithメソッドを呼び出し、input変数の末尾を判定します。判定する文字列をEndsWithメソッドの引数に与えます。 一致している場合は「末尾が一致しました。」の文字列を下部のテキストボックスに表示し、一致していない場合は「末尾は一致しませんでした。」 の文字列を下部のテキストボックスに表示します。
  if (input.EndsWith(pattern) == true)
  {
    textBox3.Text = "末尾が一致しました。";
  }
  else
  {
    textBox3.Text = "末尾は一致しませんでした。";
  }

実行結果

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


判定文字列に "n" 入力文字列に "Penguin" を入力し[button1]をクリックします。


「末尾が一致しました。」の文字列が表示されます。"Penguin" の末尾の "n" の文字が一致ししているためです。


大文字の"N"を設定した場合には、一致しません。デフォルトでは大文字と小文字は別の文字として判定されます。


判定文字列に"uin"を設定した場合には、一致します。"Penguin" の末尾3文字が一致しているためです。


判定文字列に"abc"を設定した場合には、一致しません。


入力文字列と判定文字列を同じ文字列 "Penguin" に設定した場合は末尾が一致する結果となります。


判定文字列が入力文字列より長い場合には一致しない結果となります。


日本語(マルチバイト文字)の場合も末尾の文字が一致すれば一致となります。


カルチャーに依存する結果

判定文字列を「ー」、入力文字列を「ぺんぎんクッキー」とした場合には末尾は一致しない結果となります。


なお、判定文字列が「クッキー」、入力文字列が「ぺんぎんクッキー」とした場合には末尾は一致となります。


EndsWithメソッドの標準の動作では、カルチャに依存した並べ替え規則と、現在のカルチャを使用して判定処理をするため、「ー」のみ判定文字の場合には一致と判定されないです。

カルチャーの規則を利用せずに判定するためには、StringComparison オプションを指定します。
コードを次のコードに変更します。
StringComparison.OrdinalEndsWith メソッドの第二引数に与えるとカルチャーの規則を利用せずに判定処理を実行します。
    private void button1_Click(object sender, EventArgs e)
    {
      string pattern = textBox1.Text;
      string input = textBox2.Text;

      if (input.EndsWith(pattern, StringComparison.Ordinal) == true)
      {
        textBox3.Text = "末尾が一致しました。";
      }
      else
      {
        textBox3.Text = "末尾は一致しませんでした。";
      }
    }

コード変更後に判定文字列を「ー」、入力文字列を「ぺんぎんクッキー」で処理を実行すると末尾は一致する結果となります。

制御文字を判定する例

制御文字の判定もできます。

UI

下図のフォームを作成します。ボタンとテキストボックスを配置します。

コード

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

    private void button1_Click(object sender, EventArgs e)
    {
      string[] st = new string[5];
      st[0] = "ぺんぎんクッキー\n";
      st[1] = "あひるサブレ";
      st[2] = "しろくまアイス\n";
      st[3] = "らくだキャラメル\n";
      st[4] = "かるがもタルト";

      for (int i = 0; i < st.Length; i++)
      {
        if (st[i].EndsWith('\n') == true)
        {
          textBox1.Text += String.Format("{0:d}:末尾が改行です。\r\n", i);
        }
        else
        {
          textBox1.Text += String.Format("{0:d}:末尾は改行ではないです。\r\n", i);
        }
      }

    }
  }
}

解説

EndsWith('\n') のコードで入力文字列の末尾が改行コード(\n = \x0A)であるかを判別します。

実行結果

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


[button1]をクリックします。文字列の末尾が改行コード(\n)かどうかを判定して結果をテキストボックスに表示します。

参考:StringComparisonの値

StringComparisonには以下の値を指定できます。
数値の値 意味
CurrentCulture 0 カルチャに依存した並べ替え規則と、現在のカルチャを使用して、文字列を比較します。
CurrentCultureIgnoreCase 1 カルチャに依存した並べ替え規則と、現在のカルチャを使用し、比較対象の文字列の大文字と小文字の区別を無視して、文字列を比較します。
InvariantCulture 2 カルチャに依存した並べ替え規則と、インバリアント カルチャを使用して、文字列を比較します。
InvariantCultureIgnoreCase 3 カルチャに依存した並べ替え規則と、インバリアント カルチャを使用し、比較対象の文字列の大文字と小文字の区別を無視して、文字列を比較します。
Ordinal 4 序数 (バイナリ) の並べ替え規則を使用して文字列を比較します。
OrdinalIgnoreCase 5 序数 (バイナリ) の並べ替え規則を使用し、比較対象の文字列の大文字と小文字の区別を無視して、文字列を比較します。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2022-03-21
iPentec all rights reserverd.