.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 可以轻松确定两个字符串是否相同。 此区分大小写的方法返回一个 true
或 false
布尔值。 可以从现有类使用它,如下一个示例所示。 下面的示例使用 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
。
StartsWith
和 EndsWith
方法
可以使用该方法 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
。
IndexOf
和 LastIndexOf
方法
可以使用该方法 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.LastIndexOf 与 String.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 该方法结合使用时,这两种方法都很有用。 可以使用或IndexOf
LastIndexOf
方法检索字符的位置,然后将该位置Remove
提供给方法,以便删除以该字符开头的字符或单词。
另请参阅
- 在 .NET 中使用字符串的最佳做法
- 基本字符串作
- 执行不区分区域性的字符串作
- 对权重表进行排序 - Windows 上的 .NET Framework 和 .NET Core 1.0-3.1 使用
- 默认 Unicode 排序规则元素表 - 在所有平台上由 .NET 5 和 Linux 和 macOS 上的 .NET Core 使用