【问题标题】:How to compare two strings and their upper and lower case signs如何比较两个字符串及其大小写符号
【发布时间】:2013-08-22 10:53:12
【问题描述】:

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

if (x == y)

if (x.Equals(y))

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

【问题讨论】:

标签: c# string visual-studio-2010


【解决方案1】:

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

来自String.Equals

此方法执行序数(区分大小写和 文化不敏感)比较。

对于== 也是如此,因为String.Equality operator 调用Equals

该运算符是使用 Equals 方法实现的,这意味着 比较参考和价值的组合进行测试 平等。此运算符执行序数比较。

这将不区分大小写:

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

如果你只是想知道一个字符是大写还是小写,你可以使用这些方法:

bool isUpperChar = Char.IsUpper("ABC"[0]); // yes
bool isLowerChar = Char.IsLower("ABC"[0]); // no

【讨论】:

    【解决方案2】:

    首先,您应该决定是用 culture dependent 还是 独立 方式比较字符串(例如,在俄罗斯文化中,字母“E”和“Ё”通常被视为相同;芬兰语倾向于将“V”和“W”相同等)。接下来你应该选择是否使用case ("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);
    

    【讨论】:

    • 比较方法返回 c 像 int。 not bool if 语句应如下所示: if (culture.CompareInfo.Compare(PaymentReq.IslemTipi, "ödeme", CompareOptions.IgnoreCase) == 0)
    【解决方案3】:

    正如 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/

    【讨论】:

      【解决方案4】:

      试试:

      区分大小写:

      String.Equals (a,b)
      

      不区分大小写

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          猜你喜欢
          • 2017-09-04
          • 2011-12-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多