谁能指出我有关目标C中不区分大小写的比较的任何资源?它似乎没有与之等效的方法str1.equalsIgnoreCase(str2)
谁能指出我有关目标C中不区分大小写的比较的任何资源?它似乎没有与之等效的方法str1.equalsIgnoreCase(str2)
Answers:
NSString *stringA;
NSString *stringB;
if (stringA && [stringA caseInsensitiveCompare:stringB] == NSOrderedSame) {
// match
}
注意: stringA &&
是必需的,因为when stringA
是nil
:
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
}
如果您不仅希望对大小写不敏感,还希望拥有更多的控制权,那就是:
[someString compare:otherString options:NSCaseInsensitiveSearch];
数值搜索和变音不敏感是两个方便的选择。
if ([someString compare:otherString options:NSCaseInsensitiveSearch] && someString.length > 0 && someString != (id)[NSNull null])
在进行比较之前,您始终可以确保它们处于同一情况:
if ([[stringX uppercaseString] isEqualToString:[stringY uppercaseString]]) {
// They're equal
}
主要好处是您避免了matm描述的有关比较零字符串的潜在问题。您可以在执行其中一种compare:options:
方法之前检查字符串是否为nil ,或者您可以像我一样懒惰,并忽略为每个比较创建新字符串的额外费用(如果您仅执行一个操作,这是最小的)或两个比较)。
caseInsensitiveCompare
),请始终使用它。
- (NSComparisonResult)caseInsensitiveCompare:(NSString *)aString
一种新的方法。iOS 8
let string: NSString = "Café"
let substring: NSString = "É"
string.localizedCaseInsensitiveContainsString(substring) // true
true
“Café”和“É”,则绝对不是正确的答案。
将Jason Coco的答案转换为Swift的深奥懒惰:)
if ("Some String" .caseInsensitiveCompare("some string") == .OrderedSame)
{
// Strings are equal.
}
在macOS上,您可以简单地使用-[NSString isCaseInsensitiveLike:]
,其返回结果BOOL
与相同-isEqual:
。
if ([@"Test" isCaseInsensitiveLike: @"test"])
// Success
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];
}
@"Some String"
从任何其他呼叫接收并恰好是nil
,你if
会给true
像发送caseInsensitiveCompare
到nil
是有效的,在另一个领域的结果nil
,在我们的情况下,比较了NSOrderedSame
将返回true
(NSOrderedSame
定义为0)。就我而言,这可能是相当具有破坏性的错误的来源。干杯!