比较两个字符串及其大小写符号的最佳方法

假设我有2个字符串。第一个字符串是x =“abc”,第二个字符串是y =“ABC”。当我在c#中写下代码:

if(x == y) 

要么

 if(x.Equals(y)) 

返回值为true。如何查看大小写?

返回值不是 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”和“Ё”通常视为相同;芬兰语倾向于将“V”和“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); 

尝试:

区分大小写:

 String.Equals (a,b) 

不区分大小写

 string.Equals(a, b, StringComparison.CurrentCultureIgnoreCase); 

这是您可以尝试的另一种选择。

 if(string.Compare("a", "A", true) == 0) 

正如普伦写的,或者你可以

 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/