Share via


.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 メソッドに渡すことによって、その文字またはその文字で始まる単語を削除できます。

関連項目