.NET で文字列を比較するComparing Strings in .NET

.NET は、文字列の値を比較するためのメソッドをいくつか提供します。.NET provides several methods to compare the values of strings. これらの値の比較メソッドとその説明を次の表に示します。The following table lists and describes the value-comparison methods.

メソッド名Method name 使用Use
String.Compare 2 つの文字列の値を比較します。Compares the values of two strings. 整数値を返します。Returns an integer value.
String.CompareOrdinal ローカル カルチャに関係なく、2 つの文字列を比較します。Compares two strings without regard to local culture. 整数値を返します。Returns an integer value.
String.CompareTo 現在の文字列オブジェクトを別の文字列と比較します。Compares the current string object to another string. 整数値を返します。Returns an integer value.
String.StartsWith 文字列が、渡された文字列で始まるかどうかを確認します。Determines whether a string begins with the string passed. Boolean 値を返します。Returns a Boolean value.
String.EndsWith 文字列が、渡された文字列で終わるかどうかを確認します。Determines whether a string ends with the string passed. Boolean 値を返します。Returns a Boolean value.
String.Equals 2 つの文字列が等しいかどうかを確認します。Determines whether two strings are the same. Boolean 値を返します。Returns a Boolean value.
String.IndexOf 検索対象文字列の先頭から開始して、特定の文字または文字列が見つかったインデックス位置を返します。Returns the index position of a character or string, starting from the beginning of the string you are examining. 整数値を返します。Returns an integer value.
String.LastIndexOf 検索対象文字列の末尾から開始して、特定の文字または文字列が見つかったインデックス位置を返します。Returns the index position of a character or string, starting from the end of the string you are examining. 整数値を返します。Returns an integer value.

比較Compare

静的な String.Compare メソッドは、2 つの文字列を詳細に比較する手段を提供します。The static String.Compare method provides a thorough way of comparing two strings. このメソッドはカルチャに対応しています。This method is culturally aware. この機能は、2 つの文字列、または 2 つの文字列の部分文字列を比較するために使用できます。You can use this function to compare two strings or substrings of two strings. また、大文字と小文字の区別やカルチャの違いを考慮または無視するためのオーバーロードも用意されています。Additionally, overloads are provided that regard or disregard case and cultural variance. このメソッドによって返される可能性のある 3 つの整数値を次の表に示します。The following table shows the three integer values that this method might return.

戻り値Return value 条件Condition
負の整数A negative integer 最初の文字列は、並べ替え順序が 2 番目の文字列の前に置かれます。The first string precedes the second string in the sort order.

- または --or-

最初の文字列は nullです。The first string is null.
00 最初の文字列と 2 番目の文字列は等価です。The first string and the second string are equal.

- または --or-

両方の文字列が nullです。Both strings are null.
正の整数A positive integer

- または --or-

11
最初の文字列は、並べ替え順序が 2 番目の文字列の後に続きます。The first string follows the second string in the sort order.

- または --or-

第 2 文字列は nullです。The second string is null.

重要

String.Compare メソッドは、主に文字列の並べ替えに使用するものです。The String.Compare method is primarily intended for use when ordering or sorting strings. 等価性をテストする (つまり、ある文字列が別の文字列より大きいか小さいかを問題にせずに戻り値 0 を明示的に検索する) 目的では、 String.Compare メソッドを使用しないでください。You should not use the String.Compare method to test for equality (that is, to explicitly look for a return value of 0 with no regard for whether one string is less than or greater than the other). 2 つの文字列が等価かどうかを判断するには、 String.Equals(String, String, StringComparison) メソッドを使用してください。Instead, to determine whether two strings are equal, use the String.Equals(String, String, StringComparison) method.

String.Compare メソッドを使用して、2 つの文字列の相対値を確認する例を次に示します。The following example uses the String.Compare method to determine the relative values of two strings.

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 と出力します。This example displays -1 to the console.

既定では、上の例はカルチャによって異なります。The preceding example is culture-sensitive by default. カルチャに依存しない文字列操作を実行するには、 String.Compare culture パラメーターを指定することによって使用するカルチャを指定することを可能にする メソッドのオーバーロードを使用します。To perform a culture-insensitive string comparison, use an overload of the String.Compare method that allows you to specify the culture to use by supplying a culture parameter. String.Compare メソッドを使用してカルチャに依存しない比較を実行する例については、「 カルチャを認識しない文字列比較の実行」を参照してください。For an example that demonstrates how to use the String.Compare method to perform a culture-insensitive comparison, see Performing Culture-Insensitive String Comparisons.

CompareOrdinalCompareOrdinal

String.CompareOrdinal メソッドは、ローカル カルチャを考慮せずに 2 つの文字列オブジェクトを比較します。The String.CompareOrdinal method compares two string objects without considering the local culture. このメソッドの戻り値は、上の表で示した Compare メソッドによって返される値と同じです。The return values of this method are identical to the values returned by the Compare method in the previous table.

重要

String.CompareOrdinal メソッドは、主に文字列の並べ替えに使用するものです。The String.CompareOrdinal method is primarily intended for use when ordering or sorting strings. 等価性をテストする (つまり、ある文字列が別の文字列より大きいか小さいかを問題にせずに戻り値 0 を明示的に検索する) 目的では、 String.CompareOrdinal メソッドを使用しないでください。You should not use the String.CompareOrdinal method to test for equality (that is, to explicitly look for a return value of 0 with no regard for whether one string is less than or greater than the other). 2 つの文字列が等価かどうかを判断するには、 String.Equals(String, String, StringComparison) メソッドを使用してください。Instead, to determine whether two strings are equal, use the String.Equals(String, String, StringComparison) method.

CompareOrdinal メソッドを使用して、2 つの文字列の値を比較する例を次に示します。The following example uses the CompareOrdinal method to compare the values of two strings.

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 と出力します。This example displays -32 to the console.

CompareToCompareTo

String.CompareTo メソッドは、現在の文字列オブジェクトがカプセル化している文字列を別の文字列またはオブジェクトと比較します。The String.CompareTo method compares the string that the current string object encapsulates to another string or object. このメソッドの戻り値は、上の表で示した String.Compare メソッドによって返される値と同じです。The return values of this method are identical to the values returned by the String.Compare method in the previous table.

重要

String.CompareTo メソッドは、主に文字列の並べ替えに使用するものです。The String.CompareTo method is primarily intended for use when ordering or sorting strings. 等価性をテストする (つまり、ある文字列が別の文字列より大きいか小さいかを問題にせずに戻り値 0 を明示的に検索する) 目的では、 String.CompareTo メソッドを使用しないでください。You should not use the String.CompareTo method to test for equality (that is, to explicitly look for a return value of 0 with no regard for whether one string is less than or greater than the other). 2 つの文字列が等価かどうかを判断するには、 String.Equals(String, String, StringComparison) メソッドを使用してください。Instead, to determine whether two strings are equal, use the String.Equals(String, String, StringComparison) method.

String.CompareTo メソッドを使用して、 string1 オブジェクトを string2 オブジェクトと比較する例を次に示します。The following example uses the String.CompareTo method to compare the string1 object to the string2 object.

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 と出力します。This example displays -1 to the console.

String.CompareTo メソッドのすべてのオーバーロードは、既定で、カルチャに依存して大文字小文字を区別する比較を実行します。All overloads of the String.CompareTo method perform culture-sensitive and case-sensitive comparisons by default. このメソッドのオーバーロードで、カルチャに依存しない比較を実行できるものはありません。No overloads of this method are provided that allow you to perform a culture-insensitive comparison. コードを理解しやすくするために、 String.Compare メソッドを使用することをお勧めします。その際、カルチャに依存する操作には CultureInfo.CurrentCulture を指定し、カルチャに依存しない操作には CultureInfo.InvariantCulture を指定します。For code clarity, we recommend that you use the String.Compare method instead, specifying CultureInfo.CurrentCulture for culture-sensitive operations or CultureInfo.InvariantCulture for culture-insensitive operations. String.Compare メソッドを使用してカルチャに依存する比較とカルチャに依存しない比較の両方を実行する例については、「 カルチャを認識しない文字列比較の実行」を参照してください。For examples that demonstrate how to use the String.Compare method to perform both culture-sensitive and culture-insensitive comparisons, see Performing Culture-Insensitive String Comparisons.

次の値に等しいEquals

String.Equals メソッドを使用すると、2 つの文字列が等しいかどうかを簡単に確認できます。The String.Equals method can easily determine if two strings are the same. このメソッドは大文字と小文字を区別し、 True または False の Boolean 値を返します。This case-sensitive method returns a true or false Boolean value. このメソッドは、次の例に示すように、既存のクラスで使用できます。It can be used from an existing class, as illustrated in the next example. Equals メソッドを使用して、文字列オブジェクトに "Hello World" という語句が含まれているかどうかを確認する例を次に示します。The following example uses the Equals method to determine whether a string object contains the phrase "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 と出力します。This example displays True to the console.

このメソッドは、静的メソッドとしても使用できます。This method can also be used as a static method. 静的メソッドを使用して、2 つの文字列オブジェクトを比較する例を次に示します。The following example compares two string objects using a static method.

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 と出力します。This example displays True to the console.

StartsWith と EndsWithStartsWith and EndsWith

String.StartsWith メソッドを使用すると、文字列オブジェクトが、別の文字列を構成している文字と同じ文字で始まっているかどうかを確認できます。You can use the String.StartsWith method to determine whether a string object begins with the same characters that encompass another string. このメソッドは大文字と小文字を区別し、現在の文字列オブジェクトが、渡された文字列で始まる場合は true 、それ以外の場合は false を返します。This case-sensitive method returns true if the current string object begins with the passed string and false if it does not. このメソッドを使用して、文字列オブジェクトが "Hello" で始まるかどうかを確認する例を次に示します。The following example uses this method to determine if a string object begins with "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 と出力します。This example displays True to the console.

String.EndsWith メソッドは、渡された文字列を現在の文字列オブジェクトの末尾にある文字列と比較します。The String.EndsWith method compares a passed string to the characters that exist at the end of the current string object. このメソッドも Boolean 値を返します。It also returns a Boolean value. EndsWith メソッドを使用して、文字列の末尾を確認する例を次に示します。The following example checks the end of a string using the EndsWith method.

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 と出力します。This example displays False to the console.

IndexOf と LastIndexOfIndexOf and LastIndexOf

String.IndexOf メソッドを使用すると、特定の文字が文字列内で最初に出現する位置を確認できます。You can use the String.IndexOf method to determine the position of the first occurrence of a particular character within a string. このメソッドは大文字と小文字を区別し、文字列の先頭からカウントを開始し、0 から始まるインデックスを使用して、渡された文字が出現する位置を返します。This case-sensitive method starts counting from the beginning of a string and returns the position of a passed character using a zero-based index. 指定した文字が見つからない場合は、値 –1 を返します。If the character cannot be found, a value of –1 is returned.

IndexOf メソッドを使用して、'l' という文字が文字列内で最初に出現する位置を検索する例を次に示します。The following example uses the IndexOf method to search for the first occurrence of the 'l' character in a string.

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 と出力します。This example displays 2 to the console.

String.LastIndexOf メソッドは String.IndexOf メソッドに似ていますが、指定した文字列が文字列内で最後に出現する位置を返すという点が異なります。The String.LastIndexOf method is similar to the String.IndexOf method except that it returns the position of the last occurrence of a particular character within a string. このメソッドは大文字と小文字を区別し、0 から始まるインデックスを使用します。It is case-sensitive and uses a zero-based index.

LastIndexOf メソッドを使用して、'l' という文字が文字列内で最後に出現する位置を検索する例を次に示します。The following example uses the LastIndexOf method to search for the last occurrence of the 'l' character in a string.

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 と出力します。This example displays 9 to the console.

いずれのメソッドも、 String.Remove メソッドと組み合わせて使用すると便利です。Both methods are useful when used in conjunction with the String.Remove method. IndexOf メソッドまたは LastIndexOf メソッドのいずれかを使用して文字の位置を取得し、その位置を Remove メソッドに渡すことによって、その文字またはその文字で始まる単語を削除できます。You can use either the IndexOf or LastIndexOf methods to retrieve the position of a character, and then supply that position to the Remove method in order to remove a character or a word that begins with that character.

関連項目See also