不区分大小写比较NSString
任何人都可以指向任何关于Objective C中不区分大小写的比较资源吗? 它似乎没有一个等效的方法str1.equalsIgnoreCase(str2)
if( [@"Some String" caseInsensitiveCompare:@"some string"] == NSOrderedSame ) { // strings are equal except for possibly case }
该文档位于search和比较方法
如果您希望更多的控制,而不是大小写不敏感的替代scheme是:
[someString compare:otherString options:NSCaseInsensitiveSearch];
数字search和变音不敏感是两个方便的select。
NSString *stringA; NSString *stringB; if (stringA && [stringA caseInsensitiveCompare:stringB] == NSOrderedSame) { // match }
注意: stringA &&
是必需的,因为当stringA
是stringA
:
stringA = nil; [stringA caseInsensitiveCompare:stringB] // return 0
所以发生NSOrderedSame
也被定义为0
。
以下示例是一个典型的陷阱:
NSString *rank = [[NSUserDefaults standardUserDefaults] stringForKey:@"Rank"]; if ([rank caseInsensitiveCompare:@"MANAGER"] == NSOrderedSame) { // what happens if "Rank" is not found in standardUserDefaults }
在比较之前,您可以始终确保它们处于同一个案例中:
if ([[stringX uppercaseString] isEqualToString:[stringY uppercaseString]]) { // They're equal }
主要好处是避免了matm描述的比较零string的潜在问题。 你可以在执行compare:options:
方法之前检查string是否为零,或者你可能是懒惰的(像我一样),并忽略为每个比较创build一个新的string的额外成本(如果你“只做一两个比较)。
- (NSComparisonResult)caseInsensitiveCompare:(NSString *)aString
一个新的方法来做到这一点。 iOS 8
let string: NSString = "Café" let substring: NSString = "É" string.localizedCaseInsensitiveContainsString(substring) // true
试试这个方法
- (NSComparisonResult)caseInsensitiveCompare:(NSString *)aString
如在iPhone ContactApp中检查前缀
([string rangeOfString:prefixString options:NSCaseInsensitiveSearch].location == 0)
这个博客对我很有用
把Jason Coco的答案转换成Swift深刻的懒惰:)
if ("Some String" .caseInsensitiveCompare("some string") == .OrderedSame) { // Strings are equal. }
swift的替代解决scheme:
为了使UpperCase:
例如:
if ("ABcd".uppercased() == "abcD".uppercased()){ }
或者使两个LowerCase:
例如:
if ("ABcd".lowercased() == "abcD".lowercased()){ }
NSMutableArray *arrSearchData; NSArray *data=[arrNearByData objectAtIndex:i]; NSString *strValue=[NSString stringWithFormat:@"%@", [data valueForKey:@"restName"]]; NSRange r = [strValue rangeOfString:key options:NSCaseInsensitiveSearch]; if(r.location != NSNotFound) { [arrSearchData addObject:data]; }