19

假设我有 2 个字符串。第一个字符串是x = "abc",第二个字符串是y = "ABC"。在 C# 中,当我编写以下代码时:

if (x == y)

或者

if (x.Equals(y))

返回值为true。如何检查它们的大小写?

4

5 回答 5

31

返回值不是 true,但false因为 .NET 默认情况下区分大小写。

来自String.Equals

此方法执行序数(区分大小写和不区分区域性)比较。

因为操作员调用==也是如此:String.EqualityEquals

此运算符是使用Equals方法实现的,这意味着要测试比较对象的引用和值相等组合。此运算符执行序数比较。

这将不区分大小写地比较:

bool equals = x.Equals(y , StringComparison.OrdinalIgnoreCase);

如果您只想知道字符是大写还是小写,可以使用以下方法:

bool isUpperChar = Char.IsUpper("ABC"[0]); // yes
bool isLowerChar = Char.IsLower("ABC"[0]); // no
于 2013-08-22T10:55:25.750 回答
8

首先,您应该决定是否以独立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);
于 2013-08-22T11:04:32.933 回答
2

正如 Pleun 所写,或者你可以

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/

于 2013-08-22T10:57:12.500 回答
1

尝试:

区分大小写:

String.Equals (a,b)

不区分大小写

string.Equals(a, b, StringComparison.CurrentCultureIgnoreCase);
于 2013-08-22T10:54:29.237 回答
1

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

if(string.Compare("a", "A", true) == 0)
于 2013-08-22T11:08:12.847 回答