比較 .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 方法可以輕易地判斷兩個字串是否相同。 這個區分大小寫的方法會傳回 true
或 false
布林值。 它可從現有的類別下使用,如下一個範例中所示。 下列範例會使用 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
至主控台。
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 方法會比較傳遞的字串和目前字串物件結尾上存在的字元。 它也會傳回布林值。 下列範例會使用 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 方法,以判斷字串中第一次出現特定字元的位置。 這個區分大小寫的方法從字串開頭開始算起,並使用以零為起始的索引傳回傳遞字元的位置。 如果找不到該字元,則會傳回 –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 方法使用時,這兩種方法都很實用。 您可以使用 IndexOf
或 LastIndexOf
方法來擷取字元的位置,然後提供該位置給 Remove
方法,以移除字元或以該字元開頭的單字。
另請參閱
- 在 .NET 中使用字串的最佳做法
- 基本字串作業
- 執行不區分文化特性 (Culture) 的字串作業
- 排序權數資料表 - 由 Windows 上的 .NET Framework 和 .NET Core 1.0-3.1 使用
- 預設 Unicode 定序元素資料表 - 在所有平台上使用 .NET 5,以及在 Linux 和 macOS 上使用 .NET Core