[C#] String.Compareメソッドの使い方 – 2つの文字列を比較する

String.Compareメソッドは、C#で2つの文字列を比較するために使用されます。

このメソッドは、2つの文字列を辞書順で比較し、結果として整数値を返します。

戻り値は、最初の文字列が2番目の文字列より小さい場合は負の値、等しい場合は0、大きい場合は正の値です。

オプションで大文字と小文字の区別を無視する比較や、カルチャに依存した比較も可能です。

この記事でわかること
  • String.Compareメソッドの基本的な使い方
  • 大文字と小文字の比較方法
  • カルチャを指定した比較の方法
  • 文字列の一部を比較するオーバーロード
  • 比較メソッドの違いと使い分け

目次から探す

String.Compareメソッドとは

String.Compareメソッドは、C#において2つの文字列を比較するための便利な機能です。

このメソッドは、文字列の辞書順を判断する際に使用され、比較結果として整数値を返します。

返される整数値は、最初の文字列が2番目の文字列よりも小さい場合は負の値、等しい場合は0、大きい場合は正の値となります。

このメソッドは、単純な文字列の比較だけでなく、大文字と小文字の区別やカルチャに基づく比較もサポートしています。

これにより、国や地域に応じた文字列の比較が可能となり、国際化対応のアプリケーション開発において非常に役立ちます。

String.Compareメソッドを使うことで、文字列の比較を簡単に行うことができ、プログラムの可読性や保守性を向上させることができます。

String.Compareメソッドの基本的な使い方

2つの文字列を比較する基本的な例

String.Compareメソッドを使用して、2つの文字列を比較する基本的な例を示します。

以下のコードでは、2つの文字列を比較し、その結果を出力します。

using System;
class Program
{
    static void Main()
    {
        string str1 = "apple";
        string str2 = "banana";
        
        int result = String.Compare(str1, str2);
        
        Console.WriteLine(result); // 結果を出力
    }
}
-1

この例では、"apple""banana"よりも辞書順で前にあるため、負の値が返されます。

大文字と小文字を区別する比較

String.Compareメソッドは、大文字と小文字を区別して比較することができます。

以下のコードでは、同じ単語の大文字と小文字を比較します。

using System;
class Program
{
    static void Main()
    {
        string str1 = "Apple";
        string str2 = "apple";
        
        int result = String.Compare(str1, str2);
        
        Console.WriteLine(result); // 結果を出力
    }
}
1

この場合、"Apple""apple"よりも辞書順で前にあるため、負の値が返されます。

大文字と小文字を無視する比較

大文字と小文字を無視して比較するには、StringComparison.OrdinalIgnoreCaseを指定します。

以下のコードでは、大文字と小文字を無視して比較します。

using System;
class Program
{
    static void Main()
    {
        string str1 = "Apple";
        string str2 = "apple";
        
        int result = String.Compare(str1, str2, StringComparison.OrdinalIgnoreCase);
        
        Console.WriteLine(result); // 結果を出力
    }
}
0

この場合、両方の文字列は同じと見なされるため、0が返されます。

カルチャを指定して比較する方法

カルチャを指定して比較することで、特定の言語や地域に基づいた比較が可能です。

以下のコードでは、日本語のカルチャを指定して比較します。

using System;
using System.Globalization;
class Program
{
    static void Main()
    {
        string str1 = "あ";
        string str2 = "い";
        
        int result = String.Compare(str1, str2, new CultureInfo("ja-JP"), CompareOptions.None);
        
        Console.WriteLine(result); // 結果を出力
    }
}
-1

この場合、"あ""い"よりも辞書順で前にあるため、負の値が返されます。

null値を含む文字列の比較

String.Compareメソッドは、null値を含む文字列の比較も行えます。

以下のコードでは、null値を含む文字列を比較します。

using System;
class Program
{
    static void Main()
    {
        string str1 = null;
        string str2 = "apple";
        
        int result = String.Compare(str1, str2);
        
        Console.WriteLine(result); // 結果を出力
    }
}
-1

この場合、null値はどの文字列よりも小さいと見なされるため、負の値が返されます。

String.Compareメソッドのオーバーロード

文字列の一部を比較するオーバーロード

String.Compareメソッドには、文字列の一部を比較するためのオーバーロードがあります。

このオーバーロードを使用すると、比較を行う文字列の開始位置と長さを指定できます。

以下のコードでは、2つの文字列の一部を比較します。

using System;
class Program
{
    static void Main()
    {
        string str1 = "abcdef";
        string str2 = "abcxyz";
        
        int result = String.Compare(str1, 0, str2, 0, 3);
        
        Console.WriteLine(result); // 結果を出力
    }
}
0

この例では、両方の文字列の最初の3文字("abc")を比較しているため、等しいと見なされ、0が返されます。

カルチャと比較オプションを指定するオーバーロード

カルチャと比較オプションを指定して比較するオーバーロードもあります。

このオーバーロードを使用すると、特定のカルチャに基づいた比較を行うことができます。

以下のコードでは、カルチャと比較オプションを指定して比較します。

using System;
using System.Globalization;
class Program
{
    static void Main()
    {
        string str1 = "あ";
        string str2 = "い";
        
        int result = String.Compare(str1, 0, str2, 0, 1, new CultureInfo("ja-JP"), CompareOptions.None);
        
        Console.WriteLine(result); // 結果を出力
    }
}
-1

この場合、"あ""い"よりも辞書順で前にあるため、負の値が返されます。

StringComparison列挙型を使用した比較

StringComparison列挙型を使用することで、比較の方法を柔軟に指定できます。

以下のコードでは、StringComparisonを使用して大文字と小文字を無視した比較を行います。

using System;
class Program
{
    static void Main()
    {
        string str1 = "Hello";
        string str2 = "hello";
        
        int result = String.Compare(str1, str2, StringComparison.CurrentCultureIgnoreCase);
        
        Console.WriteLine(result); // 結果を出力
    }
}
0

この例では、"Hello""hello"が大文字と小文字を無視して比較されるため、等しいと見なされ、0が返されます。

StringComparisonを使用することで、比較の挙動を簡単に制御できるため、非常に便利です。

String.Compareメソッドの応用例

辞書順に文字列をソートする

String.Compareメソッドを使用して、文字列の配列を辞書順にソートすることができます。

以下のコードでは、文字列の配列をソートする例を示します。

using System;
class Program
{
    static void Main()
    {
        string[] fruits = { "banana", "apple", "cherry" };
        
        Array.Sort(fruits, (x, y) => String.Compare(x, y));
        
        foreach (var fruit in fruits)
        {
            Console.WriteLine(fruit); // 結果を出力
        }
    }
}
apple
banana
cherry

この例では、Array.Sortメソッドを使用して、String.Compareを基に文字列をソートしています。

ユーザー入力の検証に使用する

ユーザーからの入力を検証する際にも、String.Compareメソッドが役立ちます。

例えば、特定のパスワードとユーザーが入力したパスワードを比較する場合です。

using System;
class Program
{
    static void Main()
    {
        string correctPassword = "SecurePassword123";
        string userInput = "securepassword123";
        
        if (String.Compare(correctPassword, userInput, StringComparison.OrdinalIgnoreCase) == 0)
        {
            Console.WriteLine("パスワードが一致しました。");
        }
        else
        {
            Console.WriteLine("パスワードが一致しません。");
        }
    }
}
パスワードが一致しました。

この例では、大文字と小文字を無視してパスワードを比較しています。

ファイル名やパスの比較に使用する

ファイル名やパスを比較する際にも、String.Compareメソッドが便利です。

以下のコードでは、2つのファイルパスを比較します。

using System;
class Program
{
    static void Main()
    {
        string path1 = @"C:\Folder\File.txt";
        string path2 = @"C:\folder\file.txt";
        
        int result = String.Compare(path1, path2, StringComparison.OrdinalIgnoreCase);
        
        if (result == 0)
        {
            Console.WriteLine("ファイルパスは同じです。");
        }
        else
        {
            Console.WriteLine("ファイルパスは異なります。");
        }
    }
}
ファイルパスは同じです。

この例では、ファイルパスを大文字と小文字を無視して比較しています。

カルチャに依存した文字列の並び替え

カルチャに依存した文字列の並び替えにもString.Compareメソッドが使用できます。

以下のコードでは、日本語のカルチャを指定して文字列を並び替えます。

using System;
using System.Globalization;
class Program
{
    static void Main()
    {
        string[] words = { "りんご", "あんず", "みかん" };
        
        Array.Sort(words, (x, y) => String.Compare(x, y, new CultureInfo("ja-JP"), CompareOptions.None));
        
        foreach (var word in words)
        {
            Console.WriteLine(word); // 結果を出力
        }
    }
}
あんず
みかん
りんご

この例では、日本語のカルチャに基づいて文字列を並び替えています。

カルチャを指定することで、言語特有の並び順を考慮したソートが可能です。

String.Compareメソッドと他の比較メソッドの違い

Equalsメソッドとの違い

Equalsメソッドは、2つの文字列が完全に等しいかどうかを判断するために使用されます。

このメソッドは、オブジェクトの同一性を比較するために設計されており、文字列の内容が同じであればtrueを返します。

一方、String.Compareメソッドは、文字列の辞書順を比較し、大小関係を示す整数値を返します。

以下のコードは、EqualsメソッドString.Compareメソッドの違いを示しています。

using System;
class Program
{
    static void Main()
    {
        string str1 = "Hello";
        string str2 = "hello";
        
        bool areEqual = str1.Equals(str2);
        int comparisonResult = String.Compare(str1, str2);
        
        Console.WriteLine($"Equalsメソッドの結果: {areEqual}"); // 結果を出力
        Console.WriteLine($"String.Compareメソッドの結果: {comparisonResult}"); // 結果を出力
    }
}
Equalsメソッドの結果: False
String.Compareメソッドの結果: 1

この例では、Equalsメソッドは大文字と小文字を区別しているためfalseを返し、String.Compareメソッドは辞書順での比較結果を返します。

CompareToメソッドとの違い

CompareToメソッドは、オブジェクトの比較を行うためのメソッドで、文字列に対しても使用できます。

このメソッドは、比較対象の文字列が現在のインスタンスよりも小さい場合は負の値、等しい場合は0、大きい場合は正の値を返します。

String.Compareメソッドと似たような機能を持っていますが、CompareToはインスタンスメソッドであり、比較対象を引数として受け取ります。

以下のコードは、CompareToメソッドString.Compareメソッドの違いを示しています。

using System;
class Program
{
    static void Main()
    {
        string str1 = "apple";
        string str2 = "banana";
        
        int compareToResult = str1.CompareTo(str2);
        int compareResult = String.Compare(str1, str2);
        
        Console.WriteLine($"CompareToメソッドの結果: {compareToResult}"); // 結果を出力
        Console.WriteLine($"String.Compareメソッドの結果: {compareResult}"); // 結果を出力
    }
}
CompareToメソッドの結果: -1
String.Compareメソッドの結果: -1

この例では、両方のメソッドが同じ結果を返しますが、CompareToはインスタンスメソッドであるため、呼び出し方が異なります。

StringComparison列挙型との組み合わせ

StringComparison列挙型は、文字列の比較方法を指定するために使用されます。

String.CompareメソッドEqualsメソッドCompareToメソッドと組み合わせることで、比較の挙動を柔軟に制御できます。

例えば、大文字と小文字を無視した比較や、特定のカルチャに基づいた比較を行うことができます。

以下のコードは、StringComparisonを使用して大文字と小文字を無視した比較を行う例です。

using System;
class Program
{
    static void Main()
    {
        string str1 = "Hello";
        string str2 = "hello";
        
        bool areEqual = str1.Equals(str2, StringComparison.OrdinalIgnoreCase);
        int comparisonResult = String.Compare(str1, str2, StringComparison.OrdinalIgnoreCase);
        
        Console.WriteLine($"Equalsメソッドの結果: {areEqual}"); // 結果を出力
        Console.WriteLine($"String.Compareメソッドの結果: {comparisonResult}"); // 結果を出力
    }
}
Equalsメソッドの結果: True
String.Compareメソッドの結果: 0

この例では、StringComparison.OrdinalIgnoreCaseを使用することで、大文字と小文字を無視した比較が行われ、両方のメソッドが等しいと判断しています。

StringComparisonを活用することで、比較の柔軟性が大幅に向上します。

よくある質問

String.Compareメソッドは大文字と小文字を区別しますか?

はい、String.Compareメソッドはデフォルトでは大文字と小文字を区別します。

つまり、"Hello""hello"は異なる文字列と見なされ、比較結果は負の値または正の値が返されます。

ただし、StringComparison.OrdinalIgnoreCaseを指定することで、大文字と小文字を無視した比較を行うことも可能です。

null値を比較するとどうなりますか?

String.Compareメソッドは、null値を含む文字列の比較も行えます。

null値は、どの文字列よりも小さいと見なされるため、null値と他の文字列を比較すると、常に負の値が返されます。

例えば、String.Compare(null, "apple")は負の値を返します。

カルチャに依存しない比較はどうやって行いますか?

カルチャに依存しない比較を行うには、StringComparison.OrdinalまたはStringComparison.OrdinalIgnoreCaseを使用します。

これにより、文字列の比較はバイナリ的な順序に基づいて行われ、特定のカルチャに影響されることなく、正確な比較が可能です。

以下のように指定します。

int result = String.Compare(str1, str2, StringComparison.Ordinal);

この方法を使用することで、カルチャに依存しない一貫した比較が実現できます。

まとめ

この記事では、C#のString.Compareメソッドの基本的な使い方やオーバーロード、応用例、他の比較メソッドとの違いについて詳しく解説しました。

特に、文字列の比較における柔軟性やカルチャに基づく比較の重要性が強調されました。

これを機に、実際のプログラムにString.Compareメソッドを活用し、より効率的な文字列処理を行ってみてはいかがでしょうか。

  • URLをコピーしました!
目次から探す