如何比较两个字符串及其大小写符号

20

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

if (x == y)
或者
if (x.Equals(y))

返回值为true。我怎样检查它的大小写?


以下是有关该主题的更多信息:https://dev59.com/D3RB5IYBdhLWcg3w-8Lo - Niklas
1
你的意思是如果 x = "abc"y = "ABC",那么 (x == y) 应该返回 false 吗? - Microsoft DN
是的,我想检查大小写敏感性。 - daidai
1
但是如果 x = "abc"y = "ABC"(x == y) 将始终返回 False - Microsoft DN
可能是C#:ToUpper()和ToLower()的混淆的重复问题。 - Michael Freidgeim
5个回答

32
返回结果为:

返回值不是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

8

首先,您应该决定是以与文化相关还是不相关的方式进行字符串比较(例如,在俄语文化中,“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);

比较方法返回的类型应该像 int 一样,而不是 bool。if 语句应该像下面这样: if (culture.CompareInfo.Compare(PaymentReq.IslemTipi, "ödeme", CompareOptions.IgnoreCase) == 0) - cahit beyaz

2
正如Pleun所述,或者你可以:
StringComparer.CurrentCultureIgnoreCase.Equals(a, b)

请注意,我们正在使用“CurrentCulture”排序方法。有时您需要使用不同的排序方法(每种语言以不同的方式对字母进行排序)。
如果您确定仅对ASCII字符进行排序,则:
StringComparer.OrdinalIgnoreCase.Equals(a, b)

在一些方法中,使用OrdinalIgnoreCase或许会比较快。

通常将两个字符串转换为大写或小写再进行比较是错误的(而且很慢,因为在比较之前必须完全转换它们,而也许它们在第一个字符就不同)……这是错误的,因为在土耳其语中有四个i

http://codeblog.jonskeet.uk/2009/11/02/omg-ponies-aka-humanity-epic-fail/


1

尝试:

区分大小写:

String.Equals (a,b)

不区分大小写
string.Equals(a, b, StringComparison.CurrentCultureIgnoreCase);

1

这是你可以尝试的另一个选项。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接