有人可以向我指出有关Objective C中不区分大小写的比较的任何资源吗?它似乎没有与str1.equalsIgnoreCase(str2)
答案 0 :(得分:545)
if( [@"Some String" caseInsensitiveCompare:@"some string"] == NSOrderedSame ) {
// strings are equal except for possibly case
}
答案 1 :(得分:49)
NSString *stringA;
NSString *stringB;
if (stringA && [stringA caseInsensitiveCompare:stringB] == NSOrderedSame) {
// match
}
注意: stringA &&
是必需的,因为当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
}
答案 2 :(得分:46)
如果您想要更多控制而不仅仅是不区分大小写,那么另一种选择是:
[someString compare:otherString options:NSCaseInsensitiveSearch];
数字搜索和变音不敏感是两个方便的选择。
答案 3 :(得分:22)
在比较之前,您可以始终确保它们处于相同的情况:
if ([[stringX uppercaseString] isEqualToString:[stringY uppercaseString]]) {
// They're equal
}
主要的好处是你可以避免matm描述的有关比较零字符串的潜在问题。您可以在执行其中一个compare:options:
方法之前检查字符串是否为nil,或者您可能是懒惰的(像我一样)并忽略为每个比较创建新字符串的额外成本(如果您“只进行一两次比较。”
答案 4 :(得分:7)
- (NSComparisonResult)caseInsensitiveCompare:(NSString *)aString
答案 5 :(得分:7)
一种新方法。 iOS 8
let string: NSString = "Café"
let substring: NSString = "É"
string.localizedCaseInsensitiveContainsString(substring) // true
答案 6 :(得分:6)
试试这个方法
- (NSComparisonResult)caseInsensitiveCompare:(NSString *)aString
答案 7 :(得分:6)
将Jason Coco的答案转换为 Swift ,让我非常懒惰:)
if ("Some String" .caseInsensitiveCompare("some string") == .OrderedSame)
{
// Strings are equal.
}
答案 8 :(得分:5)
检查iPhone ContactApp中的前缀
([string rangeOfString:prefixString options:NSCaseInsensitiveSearch].location == 0)
this博客对我有用
答案 9 :(得分:1)
swift的替代解决方案:
同时制作UpperCase:
e.g:
if ("ABcd".uppercased() == "abcD".uppercased()){
}
或同时制作LowerCase:
e.g:
if ("ABcd".lowercased() == "abcD".lowercased()){
}
答案 10 :(得分:0)
在macOS上,您可以简单地使用-[NSString isCaseInsensitiveLike:]
,它会返回BOOL
,就像-isEqual:
。
if ([@"Test" isCaseInsensitiveLike: @"test"])
// Success
答案 11 :(得分:-3)
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];
}