比較 .NET 中的字串

.NET 會提供數種方法來比較字串值。 下表列出並描述數值比較的方法。

方法名稱 使用
String.Compare 比較兩個字串的值。 傳回整數值。
String.CompareOrdinal 比較兩個字串,而不考慮當地文化特性。 傳回整數值。
String.CompareTo 比較目前字串物件與另一個字串。 傳回整數值。
String.StartsWith 判斷字串是否以傳遞的字串開頭。 傳回布林值。
String.EndsWith 判斷字串是否以傳遞的字串結束。 傳回布林值。
String.Contains 判斷字元或字串是否在另一個字串內發生。 傳回布林值。
String.Equals 判斷兩個字串是否相同。 傳回布林值。
String.IndexOf 從您正在檢查之字串的開頭開始,傳回字元或字串的索引位置。 傳回整數值。
String.LastIndexOf 從您正在檢查之字串的結尾開始,傳回字元或字串的索引位置。 傳回整數值。

Compare 方法

靜態 String.Compare 方法提供全面的方式來比較兩個字串。 該方法會感知文化特性。 您可以使用這個函式來比較兩個字串或兩個字串的子字串。 此外,會假定多載為考慮或是忽略大小寫和文化特性變異數。 下表顯示這個方法可能會傳回的三個整數值。

傳回值 Condition
負整數 在此排序次序中,第一個字串優先於第二個字串。

-或-

第一個字串是 null
0 第一個字串和第二個字串相等。

-或-

這兩個字串都是 null
正整數

-或-

1
在此排序次序中,第一個字串在第二個字串的後面。

-或-

第二個字串是 null

重要

String.Compare 方法主要是用於排序或字串排序時。 您不應該使用 String.Compare 方法來測試是否相等 (也就是明確地尋找為 0 的傳回值,而不考慮字串是否小於或大於另一個字串)。 相反地,若要判斷兩個字串是否相等,請使用 String.Equals(String, String, StringComparison) 方法。

下列範例會使用 String.Compare 方法,以判斷兩個字串的相對值。

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 方法的多載,可讓您藉由提供「文化特性」參數來指定要使用的文化特性。 如需示範如何使用 String.Compare 方法以執行不區分文化特性比較的範例,請參閱不區分文化特性的字串比較

CompareOrdinal 方法

String.CompareOrdinal 方法會比較兩個字串物件,而不考慮當地文化特性。 這個方法的傳回值與上表中 Compare 方法所傳回的值相同。

重要

String.CompareOrdinal 方法主要是用於排序或字串排序時。 您不應該使用 String.CompareOrdinal 方法來測試是否相等 (也就是明確地尋找為 0 的傳回值,而不考慮字串是否小於或大於另一個字串)。 相反地,若要判斷兩個字串是否相等,請使用 String.Equals(String, String, StringComparison) 方法。

下列範例會使用 CompareOrdinal 方法來比較兩個字串的值。

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 方法主要是用於排序或字串排序時。 您不應該使用 String.CompareTo 方法來測試是否相等 (也就是明確地尋找為 0 的傳回值,而不考慮字串是否小於或大於另一個字串)。 相反地,若要判斷兩個字串是否相等,請使用 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 方法可以輕易地判斷兩個字串是否相同。 這個區分大小寫的方法會傳回 truefalse 布林值。 它可從現有的類別下使用,如下一個範例中所示。 下列範例會使用 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 至主控台。

這個方法也可用做為靜態方法。 下列範例會使用靜態方法來比較兩個字串物件。

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 至主控台。

StartsWithEndsWith 方法

您可以使用 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 方法會比較傳遞的字串和目前字串物件結尾上存在的字元。 它也會傳回布林值。 下列範例會使用 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 至主控台。

IndexOfLastIndexOf 方法

您可以使用 String.IndexOf 方法,以判斷字串中第一次出現特定字元的位置。 這個區分大小寫的方法從字串開頭開始算起,並使用以零為起始的索引傳回傳遞字元的位置。 如果找不到該字元,則會傳回 –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 方法,不同之處在於會傳回字串內特定字元最後一次出現的位置。 它會區分大小寫,並使用以零為起始的索引。

下列範例會使用 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 方法使用時,這兩種方法都很實用。 您可以使用 IndexOfLastIndexOf 方法來擷取字元的位置,然後提供該位置給 Remove 方法,以移除字元或以該字元開頭的單字。

另請參閱