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

时间:2011-02-23 11:02:20

标签: ios objective-c nsstring

我有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");  
    }  
}  

5 个答案:

答案 0 :(得分:34)

如果你查看caseInsensitiveCompare:in the docs,你会看到它返回一个NSComparisonResult而不是BOOL。向上看in the docs,你会发现你可能希望它是NSOrderedSame。所以

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

应该做的伎俩。或者只是比较罗伯特建议的小写字符串。

答案 1 :(得分:7)

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

答案 2 :(得分:4)

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

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

有了这个,您只需致电:

[myString1 isEqualIgnoreCaseToString:myString2];

答案 3 :(得分:1)

要保存方法调用,我通过#define

使用了一个宏
#define isEqualIgnoreCaseToString(string1, string2) ([string1 caseInsensitiveCompare:string2] == NSOrderedSame)

然后致电:

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

答案 4 :(得分:1)

一个简单的,在相同的情况下转换两个字符串。我将它转换为小写然后检查它。

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