不区分大小写比较字符串串

时间:2010-07-11 07:51:04

标签: ios objective-c nsstring compare case-insensitive

将NSString与一组不区分大小写的其他字符串进行比较的最佳方法是什么?如果它是其中一个字符串,则该方法应返回YES,否则返回NO。

2 个答案:

答案 0 :(得分:10)

这是一个小帮手功能:

BOOL isContainedIn(NSArray* bunchOfStrings, NSString* stringToCheck)
{
    for (NSString* string in bunchOfStrings) {
        if ([string caseInsensitiveCompare:stringToCheck] == NSOrderedSame)
            return YES;
    }
    return NO;
}

当然,这可以针对不同的用例进行大大优化。

例如,如果您针对常量bunchOfStrings进行了大量检查,则可以使用NSSet来保存字符串的小写版本并使用containsObject:

BOOL isContainedIn(NSSet* bunchOfLowercaseStrings, NSString* stringToCheck)
{
    return [bunchOfLowercaseStrings containsObject:[stringToCheck lowercaseString]];
}

答案 1 :(得分:2)

只需在Nikolai的回答中添加一些内容:

NSOrderedSame定义为0

typedef NS_ENUM(NSInteger, NSComparisonResult) {NSOrderedAscending = -1L, NSOrderedSame, NSOrderedDescending};

因此,如果您在caseInsensitiveCompare:对象上致电nil,您将获得nil。然后你将nilNSOrderSame(即0)进行比较,你会得到一个当然是错误的匹配。

此外,您还必须检查传递给caseInsensitiveCompare:的参数是否必须为零。来自documentation

  

此值不得为零。如果此值为nil,则行为为   未定义,可能会在OS X的未来版本中更改。