比较 .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?"));
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 方法,以删除字符或以该字符开头的单词。

请参阅