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