比较 .NET 中的字符串

.NET 提供了几种方法来比较字符串的值。 下表列出了并描述了值比较方法。

方法名称 使用
String.Compare 比较两个字符串的值。 返回整数值。
String.CompareOrdinal 比较两个字符串而不考虑本地区域性。 返回整数值。
String.CompareTo 将当前字符串对象与另一个字符串进行比较。 返回整数值。
String.StartsWith 确定字符串是否以传递的字符串开头。 返回布尔值。
String.EndsWith 确定字符串是否以传递的字符串结尾。 返回布尔值。
String.Contains 确定字符或字符串是否在另一个字符串中发生。 返回布尔值。
String.Equals 确定两个字符串是否相同。 返回布尔值。
String.IndexOf 返回字符或字符串的索引位置,从正在检查的字符串的开头开始。 返回整数值。
String.LastIndexOf 返回从正在检查的字符串末尾开始的字符或字符串的索引位置。 返回整数值。

Compare 方法

静态 String.Compare 方法提供了一种全面比较两个字符串的方法。 此方法在文化上是有意识的。 可以使用此函数比较两个字符串或两个字符串的子字符串。 此外,还提供了重载,以考虑或忽略大小写和文化差异。 下表显示了此方法可能返回的三个整数值。

返回值 条件
负整数 第一个字符串位于排序顺序中的第二个字符串之前。

-或-

第一个字符串为 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?"));
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!"));
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 );
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 该方法执行区分区域性和不区分区域性的比较的示例,请参阅 “执行 Culture-Insensitive 字符串比较”。

Equals 方法

该方法 String.Equals 可以轻松确定两个字符串是否相同。 此区分大小写的方法返回一个 truefalse 布尔值。 可以从现有类使用它,如下一个示例所示。 下面的示例使用 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));
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"));
Dim string1 As String = "Hello World!"
Console.WriteLine(string1.StartsWith("Hello"))

本示例向控制台显示 True

该方法 String.EndsWith 将传递的字符串与当前字符串对象末尾存在的字符进行比较。 它还返回布尔值。 以下示例使用 EndsWith 该方法检查字符串的末尾。

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'));
Dim string1 As String = "Hello World!"
Console.WriteLine(string1.IndexOf("l"))

本示例向控制台显示 2

该方法 String.LastIndexOfString.IndexOf 该方法类似,只不过该方法返回字符串中特定字符的最后一个匹配项的位置。 它区分大小写,并使用从零开始的索引。

以下示例使用 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提供给方法,以便删除以该字符开头的字符或单词。

另请参阅