谁能告诉我Objective C中不区分大小写比较的资料?它似乎没有与str1.equalsIgnoreCase(str2)等效的方法
当前回答
把Jason Coco的答案转换成Swift的懒人版:)
if ("Some String" .caseInsensitiveCompare("some string") == .OrderedSame)
{
// Strings are equal.
}
其他回答
在比较之前,你总是可以确保它们在相同的情况下:
if ([[stringX uppercaseString] isEqualToString:[stringY uppercaseString]]) {
// They're equal
}
主要的好处是避免了matm中关于比较空字符串的潜在问题。你可以在做一个compare:options:方法之前检查字符串是不是nil,或者你可以偷懒(像我一样),忽略为每次比较创建新字符串的额外成本(如果你只做一两次比较,这是最小的)。
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
}
如果你想要更多的控制,而不仅仅是不区分大小写,另一个选择是:
[someString compare:otherString options:NSCaseInsensitiveSearch];
数字搜索和变音符不敏感是两个方便的选择。
试试这个方法
- (NSComparisonResult)caseInsensitiveCompare:(NSString *)aString
在macOS上,你可以简单地使用-[NSString isCaseInsensitiveLike:],它返回BOOL值就像- isequal:一样。
if ([@"Test" isCaseInsensitiveLike: @"test"])
// Success
推荐文章
- 如何删除默认的导航栏空间在SwiftUI导航视图
- 如何在iOS中使用Swift编程segue
- Swift -整数转换为小时/分钟/秒
- Swift:声明一个空字典
- 为什么ARC仍然需要@autoreleasepool ?
- 在成功提交我的应用程序后,“太多符号文件”
- 首先添加一个UIView,甚至是导航栏
- 我如何改变UIButton标题颜色?
- 如何从UIImage (Cocoa Touch)或CGImage (Core Graphics)获取像素数据?
- 在Swift中如何调用GCD主线程上的参数方法?
- NSLayoutConstraints是可动画的吗?
- iOS -构建失败,CocoaPods无法找到头文件
- Xcode 4挂在“附加到(应用程序名称)”
- CFNetwork SSLHandshake iOS 9失败
- 请求失败:不可接受的内容类型:文本/html使用AFNetworking 2.0