如何比较两个字符串及其大小写符号
本文关键字:字符串 大小写 符号 两个 何比较 比较 | 更新日期: 2023-09-27 18:28:47
假设我有两个字符串。第一个字符串是x = "abc"
,第二个字符串是y = "ABC"
。在C#中,当我编写以下代码时:
if (x == y)
或
if (x.Equals(y))
返回值为CCD_ 3。如何检查它们的大小写?
返回值不是true
而是false
,因为默认情况下.NET区分大小写。
来自String.Equals
:
此方法执行序数(区分大小写和对文化不敏感)比较。
对于==
,同样如此,因为String.Equality
操作员调用Equals
:
此运算符是使用Equals方法实现的,这意味着比较器是针对参考值和值的组合进行测试的平等此运算符执行顺序比较
这将不区分大小写进行比较:
bool equals = x.Equals(y , StringComparison.OrdinalIgnoreCase);
如果你只想知道一个字符是大写还是小写,你可以使用以下方法:
bool isUpperChar = Char.IsUpper("ABC"[0]); // yes
bool isLowerChar = Char.IsLower("ABC"[0]); // no
首先,您应该决定是以culture dependent
还是以独立的方式比较字符串(例如,在俄罗斯文化中,字母"e"answers"W"通常被视为相同;芬兰语倾向于将"V"answers"W"视为相同等)。接下来,您应该选择是否使用大小写("a"V."a")。因此有6种可能的比较:
有序(与文化无关)比较:
// Ignore case comparison
Boolean equals = String.Equals(x, y, StringComparison.OrdinalIgnoreCase);
// Case comparison
Boolean equals = String.Equals(x, y, StringComparison.Ordinal);
当前文化比较:
// Current culture, ignore case comparison
Boolean equals = String.Equals(x, y, StringComparison.CurrentCulture);
// Current culture, case comparison
Boolean equals = String.Equals(x, y, StringComparison.CurrentCultureIgnoreCase);
显性文化比较:
CultureInfo culture = new CultureInfo("Ru-ru"); // <- Or whatever you want
// Explicit culture, ignore case comparison
Boolean equals = culture.CompareInfo.Compare(x, y, CompareOptions.IgnoreCase);
// Explicit culture, case comparison
Boolean equals = culture.CompareInfo.Compare(x, y, CompareOptions.None);
正如普洛恩所写,或者你可以
StringComparer.CurrentCultureIgnoreCase.Equals(a, b)
请注意,我们使用的是CurrentCulture
排序方法。有时你必须使用不同的排序方法(每种语言都以不同的方式排序字母)
如果你确定你只订购ASCII字符,那么
StringComparer.OrdinalIgnoreCase.Equals(a, b)
稍微快一点(或者在可以选择OrdinalIgnoreCase
的一般方法中)
通常,转换ToUpper()
或ToLower()
两个字符串来比较它们是错误的(而且很慢,因为在比较它们之前必须完全转换它们,而它们可能在第一个字符中不同)。。。错了,因为在土耳其语中有四个i
http://codeblog.jonskeet.uk/2009/11/02/omg-ponies-aka-humanity-epic-fail/
尝试:
区分大小写:
String.Equals (a,b)
不区分大小写的
string.Equals(a, b, StringComparison.CurrentCultureIgnoreCase);
这是您可以尝试的另一个选项。
if(string.Compare("a", "A", true) == 0)