如何比较两个不区分大小写的字符串?

6

我有两个字符串对象,包含相同的字符串但大小写不同,现在我想比较它们时忽略大小写,应该如何做?下面是代码...

#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 的自动补全功能。 - BoltClock
如果您认为对您的问题的回答令人满意或至少有帮助,按旁边的复选标记接受它是惯例。这将增加您和回答者的声誉。这也会使得未来更有可能有人愿意回答您的问题。 - Martin Gjaldbaek
5个回答

34
如果您在文档中查找caseInsensitiveCompare:,您会发现它返回的是NSComparisonResult而不是BOOL。如果在文档中查找,您会发现您可能希望它是NSOrderedSame。所以

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

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


7

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


5
我建议在NSString上增加一个类别:
- (BOOL)isEqualIgnoreCaseToString:(NSString *)iString {
    return ([self caseInsensitiveCompare:iString] == NSOrderedSame);
}

使用这个,您可以轻松调用:

[myString1 isEqualIgnoreCaseToString:myString2];

1
为了避免使用方法调用,我通过 #define 宏定义了一个宏。
#define isEqualIgnoreCaseToString(string1, string2) ([string1 caseInsensitiveCompare:string2] == NSOrderedSame)

然后调用:
(BOOL) option = isEqualIgnoreCaseToString(compareString, toString);

1
一个简单的方法,将两个字符串转换为相同的大小写。这里我将其转换为小写并进行检查。
if ([[myString1 lowercaseString] [myString2 lowercaseString]])
{
 // same
}

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