假设我有两个字符串。第一个字符串是x = "abc"
,第二个字符串是y = "ABC"
。当我在C#中编写以下代码时:
if (x == y)
或者if (x.Equals(y))
返回值为true
。我怎样检查它的大小写?
假设我有两个字符串。第一个字符串是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
首先,您应该决定是以与文化相关还是不相关的方式进行字符串比较(例如,在俄语文化中,“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);
StringComparer.CurrentCultureIgnoreCase.Equals(a, b)
StringComparer.OrdinalIgnoreCase.Equals(a, b)
在一些方法中,使用OrdinalIgnoreCase
或许会比较快。
通常将两个字符串转换为大写或小写再进行比较是错误的(而且很慢,因为在比较之前必须完全转换它们,而也许它们在第一个字符就不同)……这是错误的,因为在土耳其语中有四个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)
x = "abc"
和y = "ABC"
,那么(x == y)
应该返回 false 吗? - Microsoft DNx = "abc"
且y = "ABC"
,(x == y)
将始终返回 False。 - Microsoft DN