文字列の比較って使ってますか?
C#ではStringクラスに文字列を比較するメソッドが用意されています。文字列の並び順を比較するためには、Compareメソッドを使います。
文字列同士が等しいか比較するためには、Equalsメソッドを使います。
この記事では、文字列の比較について
- 文字列の比較とは
- Compareメソッドの使い方
- Equalsメソッドの使い方
- ==演算子の使い方
- CompareToメソッドの使い方
- 半角、全角を区別しない方法
- ひらがな、カタカナを区別しない方法
- 正規表現で比較する方法
- ワイルドカードで比較する方法
など基本的な内容から、応用的な内容についても解説していきます。
今回は文字列の比較について、使い方をわかりやすく解説します!
文字列の比較とは
C#で文字列を比較する場合、次の2つの意味のどちらかで使われることが多いです。
まず一つ目は文字列の並び順を比較する場合です。
この場合、StringクラスのCompareメソッドを使います。
そして二つ目は文字列同士が等しいか比較する場合です。
この場合はStringクラスのEqualsメソッドを使います。
CompareメソッドとEqualsメソッドについて詳しくみていきましょう。
Compareメソッドとは
Compareメソッドは文字列の並び順を比較する場合に使います。
Compareメソッドは以下のように定義されています。
public static int Compare(
    string strA,
    string strB,
    bool ignoreCase
)
引数strAと引数strBに比較する文字列を指定します。
引数ignoreCaseにtrueを指定すると、大文字と小文字の区別を無視することができます。
戻り値は以下の通りになります。
| 値 | 説明 | 
|---|---|
| 負の整数 | strAはstrBの前 | 
| 0 | strAはstrBと同じ順番 | 
| 正の整数 | strAはstrBの後ろ | 
Equalsメソッドとは
Equalsメソッドは文字列同士が等しいか比較する場合に使います。
Equalsメソッドは以下のように定義されています。
public bool Equals(
    string value,
    StringComparison comparisonType
)
引数valueには比較する文字列を指定します。引数comparisonTypeには以下のStringComparison列挙子を使います。
列挙子のOrdinalを指定すると大文字、小文字を区別します。
OrdinalIgnoreCaseを指定すると大文字、小文字を区別しません。
文字列同士が等しい場合はtrueを、そうでない場合はfalseを返します。
Compareメソッドの使い方
それではCompareメソッドの使い方についてサンプルコードで確認しましょう。
using System;
namespace Sample
{
  class Sample
  {
    static void Main()
    {
      string strA = "Osaka";
      string strB = "Tokyo";
      string strC = "Nagoya";
      
      Console.WriteLine(string.Compare(strA, strB));
      Console.WriteLine(string.Compare(strA, strC));
      
      Console.ReadKey();
    }
  }
}
実行結果:
-1 1
このサンプルコードでは、まず文字列strAとstrBの並び順を比較しています。strA(Osaka)はstrB(Tokyo)の前ですので、負の値を返しています。
次に文字列strAとstrCの並び順を比較しています。strA(Osaka)はstrC(Nagoya)の後ろですので、正の値を返しています。
Compareメソッドを使って並び替え(ソート)を行う方法については、こちらで詳しく解説しています。
ぜひ参考にしてください。
            
                 
                    
Equalsメソッドの使い方
それではEqualsメソッドの使い方についてもサンプルコードで確認しましょう。
using System;
namespace Sample
{
  class Sample
  {
    static void Main()
    {
      string strA = "ABCDE";
      string strB = "ABCDE";
      
      if(strA.Equals(strB)) {
        Console.WriteLine("strAとstrBは同じです");  
      } else {
        Console.WriteLine("strAとstrBは違います");
      }
      
      Console.ReadKey();
    }
  }
}
実行結果:
strAとstrBは同じです
大文字、小文字を区別しない方法
大文字、小文字を区別しない場合は、引数comparisonTypeをStringComparison.OrdinalIgnoreCaseで指定します。
サンプルコードで確認しましょう。
using System;
namespace Sample
{
  class Sample
  {
    static void Main()
    {
      string strA = "ABCDE";
      string strB = "abcde";
      
      if(strA.Equals(strB, StringComparison.OrdinalIgnoreCase)) {
        Console.WriteLine("strAとstrBは同じです");  
      } else {
        Console.WriteLine("strAとstrBは違います");
      }
      
      Console.ReadKey();
    }
  }
}
実行結果:
strAとstrBは同じです
文字列strAは大文字、strBは小文字ですが、Equalsメソッドの第2引数をStringComparison.OrdinalIgnoreCaseで指定することで、等しいと判断しています。
==演算子の使い方
ここでは、==演算子で文字列の比較する方法を解説します。
==演算子で文字列を比較をするには、値の比較と同様に==演算子を使います。
次のプログラムで確認してみましょう。
using System;
namespace Sample
{
    class Sample
    {
        static void Main()
        {
            string str1 = "Samurai";
            string str2 = "Samurai";
            if (str1 == str2)
            {
                Console.WriteLine("同じ文字列です");
            }
            else
            {
                Console.WriteLine("違う文字列です");
            }
            Console.ReadKey();
        }
    }
}
実行結果:
同じ文字列です
このようにして、==演算子で文字列の比較をすることができました。
==演算子の使い方はこちらの記事で詳しく解説しているので、ぜひ確認してください。
            
                 
                    
CompareToメソッドの使い方
ここでは、CompareToメソッドで文字列の大小を比較する方法を解説します。
CompareToメソッドの戻り値は3種類なので、switch文を使って条件分岐させると便利です。
次のプログラムで確認してみましょう。
using System;
namespace Sample
{
    class Sample
    {
        static void Main()
        {
            string str1 = "A";
            string str2 = "B";
            switch (str1.CompareTo(str2))
            {
                case -1:
                    Console.WriteLine("str1はtr2より小さい");
                    break;
                case 0:
                    Console.WriteLine("str1とtr2は同じ");
                    break;
                case 1:
                    Console.WriteLine("str1はtr2より後大きい");
                    break;
            }
            Console.ReadKey();
        }
    }
}
実行結果:
str1はtr2より小さい
このようにCompareToメソッドを使って処理を分岐させることができました。
CompareToメソッドの使い方はこちらの記事で詳しく解説しているので、ぜひ確認してください。
            
                 
                    
半角、全角を区別しない方法
半角、全角を区別しない場合Compareメソッドを使う方が設定が簡単になります。
System.Globalization.CultureInfo.CurrentCulture.CompareInfoのインスタンスを生成し、Compareメソッドの引数で、System.Globalization.CompareOptions.IgnoreWidthを指定します。
using System;
namespace Sample
{
  class Sample
  {
    static void Main()
    {
      string strA = "ABCDE";
      string strB = "ABCDE";
      
      var ci = System.Globalization.CultureInfo.CurrentCulture.CompareInfo;
      int result = ci.Compare(strA, strB, System.Globalization.CompareOptions.IgnoreWidth);
      
      if(result == 0) {
        Console.WriteLine("strAとstrBは同じです");  
      } else {
        Console.WriteLine("strAとstrBは違います");
      }
      
      Console.ReadKey();
    }
  }
}
実行結果:
strAとstrBは同じです
ひらがな、カタカナを区別しない方法
ひらがな、カタカナを区別しない場合もCompareメソッドを使う方が設定が簡単になります。
System.Globalization.CultureInfo.CurrentCulture.CompareInfoのインスタンスを生成し、Compareメソッドの引数で、System.Globalization.CompareOptions.IgnoreKanaTypeを指定します。
using System;
namespace Sample
{
  class Sample
  {
    static void Main()
    {
      string strA = "さむらい";
      string strB = "サムライ";
      
      var ci = System.Globalization.CultureInfo.CurrentCulture.CompareInfo;
      int result = ci.Compare(strA, strB, System.Globalization.CompareOptions.IgnoreKanaType);
      
      if(result == 0) {
        Console.WriteLine("strAとstrBは同じです");  
      } else {
        Console.WriteLine("strAとstrBは違います");
      }
      
      Console.ReadKey();
    }
  }
}
実行結果:
strAとstrBは同じです
正規表現で比較する方法
文字列が正規表現にマッチするか比較したい場合があります。
正規表現とはいくつかの文字列を一つの形式でまとめて表現するための表現方法のことです。
C#で正規表現にマッチするか比較するには、System.Text.RegularExpressions.Regexクラスを使います。
Regexクラスの使い方については、こちらで詳しく解説していますので、ぜひ参考にしてください。
            
                 
                    
ワイルドカードで比較する方法
C#ではワイルドカードを使った比較には対応していません。
正規表現などに変換するようにしましょう。
System.Text.RegularExpressions.RegexクラスのReplaceメソッドを使って置き換えます。
まとめ
ここでは、文字列の比較について説明しました。
文字列の並び順を比較する場合にはCompareメソッドを使います。文字列同士が等しいか比較する場合にはEqualsメソッドを使います。
使いこなすことができるように、この記事を何度も参考にして下さいね!
 
  






 
        