与一堆字符串比较不区分大小写
Posted
技术标签:
【中文标题】与一堆字符串比较不区分大小写【英文标题】:Case insensitive compare against bunch of strings 【发布时间】:2010-07-11 07:51:04 【问题描述】:将 NSString 与其他不区分大小写的字符串进行比较的最佳方法是什么?如果它是字符串之一,则该方法应返回 YES,否则返回 NO。
【问题讨论】:
【参考方案1】:这是一个小辅助函数:
BOOL isContainedIn(NSArray* bunchOfStrings, NSString* stringToCheck)
for (NSString* string in bunchOfStrings)
if ([string caseInsensitiveCompare:stringToCheck] == NSOrderedSame)
return YES;
return NO;
当然,这可以针对不同的用例进行极大优化。
例如,如果您对常量 bundleOfStrings 进行大量检查,您可以使用 NSSet
来保存字符串的小写版本并使用 containsObject:
:
BOOL isContainedIn(NSSet* bunchOfLowercaseStrings, NSString* stringToCheck)
return [bunchOfLowercaseStrings containsObject:[stringToCheck lowercaseString]];
【讨论】:
谢谢。我特别在寻找类似 caseInsensitiveCompare:【参考方案2】:只是为 Nikolai 的回答添加一些补充:
NSOrderedSame
定义为 0
typedef NS_ENUM(NSInteger, NSComparisonResult) NSOrderedAscending = -1L, NSOrderedSame, NSOrderedDescending;
因此,如果您在 nil
对象上调用 caseInsensitiveCompare:
,您将得到 nil
。然后你将nil
与NSOrderSame
(为0)进行比较,你会得到一个当然是错误的匹配。
您还必须检查传递给caseInsensitiveCompare:
的参数是否必须不为零。来自documentation:
这个值不能为零。如果此值为 nil,则行为为 未定义,可能会在未来的 OS X 版本中发生变化。
【讨论】:
以上是关于与一堆字符串比较不区分大小写的主要内容,如果未能解决你的问题,请参考以下文章