[C#] 文字列の一致を判定する方法 [==演算子/Equals/Compare]

C#

この記事では、C#で2つの文字列が一致しているか判定する方法を解説します。

かわいい犬<br>
かわいい犬

文字列が同じかチェックしたい!

単純な文字列の比較から、大文字/小文字全角/半角ひらがな/カタカナ無視した比較の方法までわかりやすく解説していきます!

 

概要

文字列一致の判定方法

まず、文字列の一致を判定する方法をまとめましたので、確認してみましょう。

方法内容
==演算子完全一致の判定
Equalsメソッドオプションで判定条件を変更可能
大文字/小文字の無視
Compareメソッドオプションで判定条件を変更可能
大文字/小文字の無視
全角/半角の無視
ひらがな/カタカナの無視

完全一致か条件を指定したいかで使い分けると良いでしょう。

次項ではサンプルコードとともに具体的な実装方法を解説していきます。

 

サンプル&詳細解説

完全一致での比較(==演算子、Equalsメソッド)

==演算子を使った方法

基本的な一致判定として、==演算子で比較する方法があります。

サンプルコード

using System;

namespace SampleCode
{
    class SampleCode
    {
        static void Main()
        {
            string str1 = "Cat";
            string str2 = "Cat";

            // 文字列の一致を判定
            if(str1 == str2)
            {
                Console.WriteLine("一致");
            }
            else
            {
                Console.WriteLine("不一致");
            }

            Console.ReadKey();
        }
    }
}

実行結果

一致

==演算子で2つの文字列を比較した場合、完全に一致しているとtrueを返します。
 

Equalsメソッドを使った方法

Equalsメソッドで第一引数のみを指定した場合は、完全一致での比較となります。

サンプルコード

using System;

namespace SampleCode
{
    class SampleCode
    {
        static void Main()
        {
            string str1 = "Cat";
            string str2 = "Cat";

            if (str1.Equals(str2))
            {
                Console.WriteLine("一致");
            }
            else
            {
                Console.WriteLine("不一致");
            }

            Console.ReadKey();
        }
    }
}

実行結果

一致

==演算子と同じく、完全に一致しているとtrueを返します。

注意点として、Equalsメソッドではstr1がnullだとNullReferenceExceptionの例外エラーが発生します。
エラーを回避したい場合は、null許容型を使いましょう。

if (str1?.Equals(str2) == true)  // null許容型でNullReferenceException回避

 

大文字小文字を無視した比較(Equalsメソッド、Compareメソッド)

Equalsメソッドを使った方法

Equalsメソッドでは、第二引数にStringComparison.CurrentCultureIgnoreCaseを指定すれば、大文字・小文字を無視して一致判定を行います。

サンプルコード

using System;

namespace SampleCode
{
    class SampleCode
    {
        static void Main()
        {
            string str1 = "Cat";
            string str2 = "CAT";

            if (str1.Equals(str2, StringComparison.CurrentCultureIgnoreCase))
            {
                Console.WriteLine("一致");
            }
            else
            {
                Console.WriteLine("不一致");
            }

            Console.ReadKey();
        }
    }
}

実行結果

一致

大文字と小文字の違いは無視して比較し、結果は「一致」となりました。

 

Compareメソッドを使った方法

次はCompareメソッドを使った方法です。

Compareメソッドは第一引数と第二引数に比較したい文字列を指定しますが、さらに第三引数にtrueを指定すると大文字小文字を無視して比較するようになります。

サンプルコード

using System;

namespace SampleCode
{
    class SampleCode
    {
        static void Main()
        {
            string str1 = "Cat";
            string str2 = "CAT";

            if (String.Compare(str1, str2, true) == 0)
            {
                Console.WriteLine("一致");
            }
            else
            {
                Console.WriteLine("不一致");
            }

            Console.ReadKey();
        }
    }
}

実行結果

一致

大文字と小文字の違いは無視して比較し、結果は「一致」となりました。

 

全角半角を無視した比較(CompareOptions.IgnoreWidth)

Compareメソッドは、第三引数にカルチャ情報(CultureInfo)、第四引数に比較オプション(CompareOptions)を指定すると様々な比較条件を指定できます。
その一つとして、CompareOptions.IgnoreWidthを指定すれば全角半角を無視して比較できます。

サンプルコード

using System;
using System.Globalization;

namespace SampleCode
{
    class SampleCode
    {
        static void Main()
        {
            string str1 = "Cat";
            string str2 = "Cat";

            // カルチャ情報 日本
            CultureInfo info = new CultureInfo("ja-JP");
            
            // 比較オプション  
            CompareOptions options = CompareOptions.IgnoreWidth;

            if (String.Compare(str1, str2, info, options) == 0)
            {
                Console.WriteLine("一致");
            }
            else
            {
                Console.WriteLine("不一致");
            }

            Console.ReadKey();
        }
    }
}

実行結果

一致

半角文字と全角文字の比較ですが、結果は「一致」となりました。

 

ひらがな・カタカナを無視した比較(CompareOptions.IgnoreKanaType)

Compareメソッドの比較オプションとしてCompareOptions.IgnoreKanaTypeを指定すれば、ひらがな・カタカナを無視して比較できます。

サンプルコード

using System;
using System.Globalization;

namespace SampleCode
{
    class SampleCode
    {
        static void Main()
        {
            string str1 = "ねこ";
            string str2 = "ネコ";

            // カルチャ情報 日本
            CultureInfo info = new CultureInfo("ja-JP");

            // 比較オプション  ひらがな・カタカナ無視
            CompareOptions options = CompareOptions.IgnoreKanaType;

            // 文字列を比較
            if (String.Compare(str1, str2, info, options) == 0)
            {
                Console.WriteLine("一致");
            }
            else
            {
                Console.WriteLine("不一致");
            }

            Console.ReadKey();
        }
    }
}

実行結果

一致

ひらがなとカタカナでも同じ文字として比較するようになりました。

 

大文字/小文字、全角/半角、ひらがな/カタカナ全て無視した比較

ここまでで紹介したCompareメソッドの比較オプションは、以下のように組み合わせて使うこともできます。

サンプルコード

using System;
using System.Globalization;

namespace SampleCode
{
    class SampleCode
    {
        static void Main()
        {
            string str1 = "ねこChan";
            string str2 = "ネコCHAN";

            // カルチャ情報 日本
            CultureInfo info = new CultureInfo("ja-JP");

            // 比較オプション  大文字小文字、全角半角、ひらがなカタカナ無視
            CompareOptions options = 
                CompareOptions.IgnoreCase | 
                CompareOptions.IgnoreWidth | 
                CompareOptions.IgnoreKanaType;

            // 文字列を比較
            if (String.Compare(str1, str2, info, options) == 0)
            {
                Console.WriteLine("一致");
            }
            else
            {
                Console.WriteLine("不一致");
            }

            Console.ReadKey();
        }
    }
}

実行結果

一致

大文字/小文字全角/半角ひらがな/カタカナ全てを無視して比較するようになりました。

 

まとめ

以下は当記事のまとめです!

  • 文字列の一致を調べるには、==演算子EqualsメソッドCompareメソッドの3つの方法がある。
  • EqualsメソッドやCompareメソッドでは、オプションと指定すれば大文字小文字を無視して文字列の比較ができる。
  • Compareメソッドでは、さらに半角全角やひらがな・カタカナを無視するオプションも存在する。

 

以上です!

解説した通り、文字列の一致判定には様々な条件を指定できます。
とても便利な機能ですが、開発するシステムの仕様に合わせて適切に選ぶ必要がありますので、その点には十分注意しましょう!!

コメント

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