【问题标题】:How to compare two case insensitive strings?如何比较两个不区分大小写的字符串?
【发布时间】:2011-02-23 11:02:20
【问题描述】:

我有 2 个包含相同字符串但大小写不同的字符串对象,现在我想比较它们忽略大小写敏感,怎么做??这里是代码...

#import <Foundation/Foundation.h>
void main()  
{  
    NSString *myString1 = @"mphasis";  
    NSString *myString2 = @"MPHASIS";
    if ([myString1 caseInsenstiveCompare:myString2])  
    {  
        NSLog (@"ITS EQUAL");  
    }  
    else  
    {   
        NSLog (@"ITS NOT EQUAL");  
    }  
}  

【问题讨论】:

  • 你快到了。如果遇到困难,您可能需要参考文档甚至 Xcode 的自动完成功能。
  • 如果您认为您的问题的答案令人满意或至少有帮助,通常单击旁边的复选标记来接受它。这将提高您和回答者的声誉。这也将使将来有人打扰回答您的可能性更大。

标签: ios objective-c nsstring


【解决方案1】:

如果您查找 caseInsensitiveCompare:in the docs,您会看到它返回的是 NSComparisonResult 而不是 BOOL。查看in the docs,您会发现您可能希望它是NSOrderedSame。所以

if ([myString1 caseInsensitiveCompare:myString2] == NSOrderedSame)

应该可以解决问题。或者只是像罗伯特建议的那样比较小写字符串。

【讨论】:

    【解决方案2】:

    只需对两个字符串都使用小写字符串,然后像使用普通字符串相等检查一样比较它们。它仍然是 O(n),所以没什么大不了的。

    【讨论】:

      【解决方案3】:

      我宁愿建议在 NSString 上添加一个类别:

      - (BOOL)isEqualIgnoreCaseToString:(NSString *)iString {
          return ([self caseInsensitiveCompare:iString] == NSOrderedSame);
      }
      

      有了这个,你可以简单地调用:

      [myString1 isEqualIgnoreCaseToString:myString2];
      

      【讨论】:

        【解决方案4】:

        为了保存方法调用,我通过#define 使用了一个宏:

        #define isEqualIgnoreCaseToString(string1, string2) ([string1 caseInsensitiveCompare:string2] == NSOrderedSame)
        

        然后调用:

        (BOOL) option = isEqualIgnoreCaseToString(compareString, toString);
        

        【讨论】:

          【解决方案5】:

          一个简单的,将两个字符串转换为相同的大小写。这里我将它转换为小写然后检查它。

          if ([[myString1 lowercaseString] [myString2 lowercaseString]])
          {
           // same
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-12-12
            • 1970-01-01
            • 1970-01-01
            • 2011-05-27
            • 1970-01-01
            相关资源
            最近更新 更多