.NET で文字列を比較する
.NET は、文字列の値を比較するためのメソッドをいくつか提供します。 これらの値の比較メソッドとその説明を次の表に示します。
メソッド名 | 使用 |
---|---|
String.Compare | 2 つの文字列の値を比較します。 整数値を返します。 |
String.CompareOrdinal | ローカル カルチャに関係なく、2 つの文字列を比較します。 整数値を返します。 |
String.CompareTo | 現在の文字列オブジェクトを別の文字列と比較します。 整数値を返します。 |
String.StartsWith | 文字列が、渡された文字列で始まるかどうかを確認します。 Boolean 値を返します。 |
String.EndsWith | 文字列が、渡された文字列で終わるかどうかを確認します。 Boolean 値を返します。 |
String.Contains | 文字または文字列が別の文字列内にあるかどうかを判断します。 Boolean 値を返します。 |
String.Equals | 2 つの文字列が等しいかどうかを確認します。 Boolean 値を返します。 |
String.IndexOf | 検索対象文字列の先頭から開始して、特定の文字または文字列が見つかったインデックス位置を返します。 整数値を返します。 |
String.LastIndexOf | 検索対象文字列の末尾から開始して、特定の文字または文字列が見つかったインデックス位置を返します。 整数値を返します。 |
Compare
メソッド
静的な String.Compare メソッドは、2 つの文字列を詳細に比較する手段を提供します。 このメソッドはカルチャに対応しています。 この機能は、2 つの文字列、または 2 つの文字列の部分文字列を比較するために使用できます。 また、大文字と小文字の区別やカルチャの違いを考慮または無視するためのオーバーロードも用意されています。 このメソッドによって返される可能性のある 3 つの整数値を次の表に示します。
戻り値 | 条件 |
---|---|
負の整数 | 最初の文字列は、並べ替え順序が 2 番目の文字列の前に置かれます。 \- または - 最初の文字列は null です。 |
0 | 最初の文字列と 2 番目の文字列は等価です。 \- または - 両方の文字列が null です。 |
正の整数 \- または - 1 |
最初の文字列は、並べ替え順序が 2 番目の文字列の後に続きます。 \- または - 第 2 文字列は null です。 |
重要
String.Compare メソッドは、主に文字列の並べ替えに使用するものです。 等価性をテストする (つまり、ある文字列が別の文字列より大きいか小さいかを問題にせずに戻り値 0 を明示的に検索する) 目的では、 String.Compare メソッドを使用しないでください。 2 つの文字列が等価かどうかを判断するには、 String.Equals(String, String, StringComparison) メソッドを使用してください。
String.Compare メソッドを使用して、2 つの文字列の相対値を確認する例を次に示します。
String^ string1 = "Hello World!";
Console::WriteLine(String::Compare(string1, "Hello World?"));
string string1 = "Hello World!";
Console.WriteLine(String.Compare(string1, "Hello World?"));
Dim string1 As String = "Hello World!"
Console.WriteLine(String.Compare(string1, "Hello World?"))
この例は、コンソールに -1
と出力します。
既定では、上の例はカルチャによって異なります。 カルチャに依存せずに文字列を比較するには、String.Compare メソッドのオーバーロードを利用します。このメソッドでは、culture パラメーターを指定することで、使用するカルチャを指定できます。 String.Compare メソッドを使用してカルチャに依存しない比較を実行する例については、カルチャを認識しない文字列の比較に関するページを参照してください。
CompareOrdinal
メソッド
String.CompareOrdinal メソッドは、ローカル カルチャを考慮せずに 2 つの文字列オブジェクトを比較します。 このメソッドの戻り値は、上の表で示した Compare
メソッドによって返される値と同じです。
重要
String.CompareOrdinal メソッドは、主に文字列の並べ替えに使用するものです。 等価性をテストする (つまり、ある文字列が別の文字列より大きいか小さいかを問題にせずに戻り値 0 を明示的に検索する) 目的では、 String.CompareOrdinal メソッドを使用しないでください。 2 つの文字列が等価かどうかを判断するには、 String.Equals(String, String, StringComparison) メソッドを使用してください。
CompareOrdinal
メソッドを使用して、2 つの文字列の値を比較する例を次に示します。
String^ string1 = "Hello World!";
Console::WriteLine(String::CompareOrdinal(string1, "hello world!"));
string string1 = "Hello World!";
Console.WriteLine(String.CompareOrdinal(string1, "hello world!"));
Dim string1 As String = "Hello World!"
Console.WriteLine(String.CompareOrdinal(string1, "hello world!"))
この例は、コンソールに -32
と出力します。
CompareTo
メソッド
String.CompareTo メソッドは、現在の文字列オブジェクトがカプセル化している文字列を別の文字列またはオブジェクトと比較します。 このメソッドの戻り値は、上の表で示した String.Compare メソッドによって返される値と同じです。
重要
String.CompareTo メソッドは、主に文字列の並べ替えに使用するものです。 等価性をテストする (つまり、ある文字列が別の文字列より大きいか小さいかを問題にせずに戻り値 0 を明示的に検索する) 目的では、 String.CompareTo メソッドを使用しないでください。 2 つの文字列が等価かどうかを判断するには、 String.Equals(String, String, StringComparison) メソッドを使用してください。
String.CompareTo メソッドを使用して、 string1
オブジェクトを string2
オブジェクトと比較する例を次に示します。
String^ string1 = "Hello World";
String^ string2 = "Hello World!";
int MyInt = string1->CompareTo(string2);
Console::WriteLine( MyInt );
string string1 = "Hello World";
string string2 = "Hello World!";
int MyInt = string1.CompareTo(string2);
Console.WriteLine( MyInt );
Dim string1 As String = "Hello World"
Dim string2 As String = "Hello World!"
Dim MyInt As Integer = string1.CompareTo(string2)
Console.WriteLine(MyInt)
この例は、コンソールに -1
と出力します。
String.CompareTo メソッドのすべてのオーバーロードは、既定で、カルチャに依存して大文字小文字を区別する比較を実行します。 このメソッドのオーバーロードで、カルチャに依存しない比較を実行できるものはありません。 コードを理解しやすくするために、 String.Compare
メソッドを使用することをお勧めします。その際、カルチャに依存する操作には CultureInfo.CurrentCulture を指定し、カルチャに依存しない操作には CultureInfo.InvariantCulture を指定します。 String.Compare
メソッドを使用してカルチャに依存する比較とカルチャに依存しない比較の両方を実行する例については、「カルチャを認識しない文字列比較の実行」を参照してください。
Equals
メソッド
String.Equals メソッドを使用すると、2 つの文字列が等しいかどうかを簡単に確認できます。 このメソッドは大文字と小文字を区別し、true
または false
の Boolean 値を返します。 このメソッドは、次の例に示すように、既存のクラスで使用できます。 Equals
メソッドを使用して、文字列オブジェクトに "Hello World" という語句が含まれているかどうかを確認する例を次に示します。
String^ string1 = "Hello World";
Console::WriteLine(string1->Equals("Hello World"));
string string1 = "Hello World";
Console.WriteLine(string1.Equals("Hello World"));
Dim string1 As String = "Hello World"
Console.WriteLine(string1.Equals("Hello World"))
この例は、コンソールに True
と出力します。
このメソッドは、静的メソッドとしても使用できます。 静的メソッドを使用して、2 つの文字列オブジェクトを比較する例を次に示します。
String^ string1 = "Hello World";
String^ string2 = "Hello World";
Console::WriteLine(String::Equals(string1, string2));
string string1 = "Hello World";
string string2 = "Hello World";
Console.WriteLine(String.Equals(string1, string2));
Dim string1 As String = "Hello World"
Dim string2 As String = "Hello World"
Console.WriteLine(String.Equals(string1, string2))
この例は、コンソールに True
と出力します。
StartsWith
メソッドおよび EndsWith
メソッド
String.StartsWith メソッドを使用すると、文字列オブジェクトが、別の文字列を構成している文字と同じ文字で始まっているかどうかを確認できます。 このメソッドは大文字と小文字を区別し、現在の文字列オブジェクトが、渡された文字列で始まる場合は true
、それ以外の場合は false
を返します。 このメソッドを使用して、文字列オブジェクトが "Hello" で始まるかどうかを確認する例を次に示します。
String^ string1 = "Hello World";
Console::WriteLine(string1->StartsWith("Hello"));
string string1 = "Hello World";
Console.WriteLine(string1.StartsWith("Hello"));
Dim string1 As String = "Hello World!"
Console.WriteLine(string1.StartsWith("Hello"))
この例は、コンソールに True
と出力します。
String.EndsWith メソッドは、渡された文字列を現在の文字列オブジェクトの末尾にある文字列と比較します。 このメソッドも Boolean 値を返します。 EndsWith
メソッドを使用して、文字列の末尾を確認する例を次に示します。
String^ string1 = "Hello World";
Console::WriteLine(string1->EndsWith("Hello"));
string string1 = "Hello World";
Console.WriteLine(string1.EndsWith("Hello"));
Dim string1 As String = "Hello World!"
Console.WriteLine(string1.EndsWith("Hello"))
この例は、コンソールに False
と出力します。
IndexOf
メソッドおよび LastIndexOf
メソッド
String.IndexOf メソッドを使用すると、特定の文字が文字列内で最初に出現する位置を確認できます。 このメソッドは大文字と小文字を区別し、文字列の先頭からカウントを開始し、0 から始まるインデックスを使用して、渡された文字が出現する位置を返します。 指定した文字が見つからない場合は、値 –1 を返します。
IndexOf
メソッドを使用して、'l
' という文字が文字列内で最初に出現する位置を検索する例を次に示します。
String^ string1 = "Hello World";
Console::WriteLine(string1->IndexOf('l'));
string string1 = "Hello World";
Console.WriteLine(string1.IndexOf('l'));
Dim string1 As String = "Hello World!"
Console.WriteLine(string1.IndexOf("l"))
この例は、コンソールに 2
と出力します。
String.LastIndexOf メソッドは String.IndexOf
メソッドに似ていますが、指定した文字列が文字列内で最後に出現する位置を返すという点が異なります。 このメソッドは大文字と小文字を区別し、0 から始まるインデックスを使用します。
LastIndexOf
メソッドを使用して、'l
' という文字が文字列内で最後に出現する位置を検索する例を次に示します。
String^ string1 = "Hello World";
Console::WriteLine(string1->LastIndexOf('l'));
string string1 = "Hello World";
Console.WriteLine(string1.LastIndexOf('l'));
Dim string1 As String = "Hello World!"
Console.WriteLine(string1.LastIndexOf("l"))
この例は、コンソールに 9
と出力します。
いずれのメソッドも、 String.Remove メソッドと組み合わせて使用すると便利です。 IndexOf
メソッドまたは LastIndexOf
メソッドのいずれかを使用して文字の位置を取得し、その位置を Remove
メソッドに渡すことによって、その文字またはその文字で始まる単語を削除できます。
関連項目
- .NET の文字列を使用するためのベスト プラクティス
- 基本的な文字列操作
- カルチャを認識しない文字列操作の実行
- 重みのテーブルの並べ替え - Windows 上の .NET Framework と .NET Core 1.0 - 3.1 によって使用されます
- デフォルト Unicode 照合基本テーブル - すべてのプラットフォーム上の .NET 5 と、Linux および macOS 上の .NET Core によって使用されます
.NET