比较字符串

.NET Framework 提供多个方法来比较字符串的值。 下表列出并描述了这些值比较方法。

方法名

使用

String.Compare

比较两个字符串的值。 返回一个整数值。

String.CompareOrdinal

比较两个字符串而不考虑本地区域性。 返回整数值。

String.CompareTo

将当前字符串对象与另一个字符串进行比较。 返回整数值。

String.StartsWith

确定一个字符串是否以传递的字符串开头。 返回布尔值。

String.EndsWith

确定一个字符串是否以传递的字符串结尾。 返回布尔值。

String.Equals

确定两个字符串是否相同。 返回布尔值。

String.IndexOf

返回字符或字符串的索引位置,索引位置从正在检查的字符串的开头开始。 返回整数值。

String.LastIndexOf

返回字符或字符串的索引位置,索引位置从正在检查的字符串的结尾开始。 返回整数值。

比较

String.Compare 方法提供了将当前字符串对象与另一个字符串或对象进行全面比较的方法。 此方法识别区域性。 可以使用此函数来比较两个字符串或两个字符串的子串。 另外,还提供了考虑或忽略大小写与区域性差异的重载。 下表说明了此方法可能返回的三个整数值。

值类型

Condition

负整数

strA 小于 strB

0

strA 等于 strB

正整数

- 或 -

1

此实例大于 value

- 或 -

value 是一个 null 引用(在 Visual Basic 中为 Nothing)。

重要说明重要事项

Compare 方法主要用于对字符串排序。不应使用 Compare 方法测试是否相等(即,无论一个字符串是小于还是大于另一个字符串,都明确期望返回值为 0)。而若要确定两个字符串是否相等,请使用 String.Equals(String, String, StringComparison) 方法。

下面的示例使用 Compare 方法来确定两个字符串的相对值。

Dim MyString As String = "Hello World!"
Console.WriteLine(String.Compare(MyString, "Hello World?"))
string MyString = "Hello World!";
Console.WriteLine(String.Compare(MyString, "Hello World?"));
String^ MyString = "Hello World!";
Console::WriteLine(String::Compare(MyString, "Hello World?"));

此示例将 -1 显示到控制台。

前一个示例默认情况下区分区域性。 如要执行不区分区域性的字符串比较,请使用 String.Compare 方法的重载,此方法重载允许通过提供 culture 参数指定要使用的区域性。 若要查看演示如何使用 String.Compare 方法执行不区分区域性的比较的示例,请参见执行不区分区域性的字符串比较

CompareOrdinal

String.CompareOrdinal 方法比较两个字符串对象而不考虑本地区域性。 此方法的返回值与前一个表中的 Compare 方法返回的值相同。

重要说明重要事项

CompareOrdinal 方法主要用于对字符串排序。不应使用 CompareOrdinal 方法测试是否相等(即,无论一个字符串是小于还是大于另一个字符串,都明确期望返回值为 0)。而若要确定两个字符串是否相等,请使用 String.Equals(String, String, StringComparison) 方法。

下面的示例使用 CompareOrdinal 方法来比较两个字符串的值。

Dim MyString As String = "Hello World!"
Console.WriteLine(String.CompareOrdinal(MyString, "hello world!"))
string MyString = "Hello World!";
Console.WriteLine(String.CompareOrdinal(MyString, "hello world!"));
String^ MyString = "Hello World!";
Console::WriteLine(String::CompareOrdinal(MyString, "hello world!"));

此示例将 -32 显示到控制台。

CompareTo

String.CompareTo 方法将当前字符串对象封装的字符串与另一个字符串或对象进行比较。 此方法的返回值与前一个表中的 Compare 方法返回的值相同。

重要说明重要事项

CompareTo 方法主要用于对字符串排序。不应使用 CompareTo 方法测试是否相等(即,无论一个字符串是小于还是大于另一个字符串,都明确期望返回值为 0)。而若要确定两个字符串是否相等,请使用 String.Equals(String, String, StringComparison) 方法。

下面的示例使用 CompareTo 方法将 MyString 对象与 OtherString 对象进行比较。

Dim MyString As String = "Hello World!"
Dim OtherString As String = "Hello World!"
Dim MyInt As Integer = MyString.CompareTo(OtherString)
Console.WriteLine( MyInt )
string MyString = "Hello World";
string OtherString = "Hello World!";
int MyInt = MyString.CompareTo(OtherString);
Console.WriteLine( MyInt );
String^ MyString = "Hello World";
String^ OtherString = "Hello World!";
int MyInt = MyString->CompareTo(OtherString);
Console::WriteLine( MyInt );

该示例向控制台显示 1。

String.CompareTo 方法的所有重载在默认情况下都会执行区分区域性和区分大小写的比较。 未提供此方法的允许执行不区分区域性的比较的重载。 为了使代码简单明了,建议您改用 String.Compare 方法,并为区分区域性的操作指定 CultureInfo.CurrentCulture 或为不区分区域性的操作指定 CultureInfo.InvariantCulture。 若要查看演示如何使用 String.Compare 方法执行区分区域性和不区分区域性这两种比较的示例,请参见执行不区分区域性的字符串比较

Equals

String.Equals 方法可以轻易地确定两个字符串是否相同。 这个区分大小写的方法返回布尔值 TrueFalse。 它可以在现有的类中使用,这一点将在下一个示例中阐释。 下面的示例使用 Equals 方法来确定一个字符串对象是否包含词组“Hello World”。

Dim MyString As String = "Hello World!"
Console.WriteLine(MyString.Equals("Hello World"))
string MyString = "Hello World";
Console.WriteLine(MyString.Equals("Hello World"));
String^ MyString = "Hello World";
Console::WriteLine(MyString->Equals("Hello World"));

此示例将 True 显示到控制台。

此方法也可用作静态方法。 下面的示例使用静态方法比较两个字符串对象。

Dim MyString As String = "Hello World!"
Dim YourString As String = "Hello World"
Console.WriteLine(String.Equals(MyString, YourString))
string MyString = "Hello World";
string YourString = "Hello World";
Console.WriteLine(String.Equals(MyString, YourString));
String^ MyString = "Hello World";
String^ YourString = "Hello World";
Console::WriteLine(String::Equals(MyString, YourString));

此示例将 True 显示到控制台。

StartsWith 和 EndsWith

可以使用 String.StartsWith 方法来确定一个字符串对象是否以构成另一个字符串的同一组字符开始。 如果当前字符串对象以传递的字符串开始,则这个区分大小写的方法返回 true,否则返回 false。 下面的示例使用此方法来确定一个字符串对象是否以“Hello”开始。

Dim MyString As String = "Hello World!"
Console.WriteLine(MyString.StartsWith("Hello"))
string MyString = "Hello World";
Console.WriteLine(MyString.StartsWith("Hello"));
String^ MyString = "Hello World";
Console::WriteLine(MyString->StartsWith("Hello"));

此示例将 True 显示到控制台。

String.EndsWith 方法将传递的字符串与位于当前字符串对象结尾处的字符进行比较。 它也返回布尔值。 下面的示例使用 EndsWith 方法检查字符串的结尾。

Dim MyString As String = "Hello World!"
Console.WriteLine(MyString.EndsWith("Hello"))
string MyString = "Hello World";
Console.WriteLine(MyString.EndsWith("Hello"));
String^ MyString = "Hello World";
Console::WriteLine(MyString->EndsWith("Hello"));

此示例将 False 显示到控制台。

IndexOf 和 LastIndexOf

可以使用 String.IndexOf 方法来确定特定字符在字符串中第一次出现的位置。 这个区分大小写的方法从字符串的开头开始计数,并使用从零开始的索引返回传递的字符的位置。 如果无法找到该字符,则返回值 –1。

下面的示例使用 IndexOf 方法搜索字符“l”在字符串中第一次出现的位置。

Dim MyString As String = "Hello World!"
Console.WriteLine(MyString.IndexOf("l"))
string MyString = "Hello World";
Console.WriteLine(MyString.IndexOf('l'));
String^ MyString = "Hello World";
Console::WriteLine(MyString->IndexOf('l'));

此示例将 2 显示到控制台。

String.LastIndexOf 方法类似于 String.IndexOf 方法,不同之处在于它返回特定字符在字符串中最后出现的位置。 它区分大小写,并使用从零开始的索引。

下面的示例使用 LastIndexOf 方法来搜索字符“l”在字符串中最后出现的位置。

Dim MyString As String = "Hello World!"
Console.WriteLine(MyString.LastIndexOf("l"))
string MyString = "Hello World";
Console.WriteLine(MyString.LastIndexOf('l'));
String^ MyString = "Hello World";
Console::WriteLine(MyString->LastIndexOf('l'));

此示例将 9 显示到控制台。

当与 String.Remove 方法一起使用时,这两种方法都非常有用。 可以使用 IndexOfLastIndexOf 方法来检索字符的位置,然后将该位置提供给 Remove 方法以便移除字符或移除以该字符开头的单词。

请参见

其他资源

基本字符串操作

执行不区分区域性的字符串操作