比较NSString与其他字符串不区分大小写的最佳方法是什么?如果它是其中一个字符串,那么该方法应返回YES,否则返回NO。不区分大小写比较字符串
2
A
回答
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]];
}
2
只是为了一些补充添加到尼古拉的回答是:
NSOrderedSame
如果你调用012被定义为0
typedef NS_ENUM(NSInteger, NSComparisonResult) {NSOrderedAscending = -1L, NSOrderedSame, NSOrderedDescending};
所以对一个nil
对象,你会得到nil
。然后你比较nil
与NSOrderSame
(这是0),你会得到一个当然是错误的比赛。
此外,您将不得不检查传递给caseInsensitiveCompare:
的参数是否必须不为零。从documentation:
该值不能为零。如果此值为零,则行为为 未定义,并可能在未来版本的OS X中更改。
谢谢。我特别寻找像caseInsensitiveCompare: – 2010-07-11 09:12:46