Bất cứ ai cũng có thể chỉ cho tôi bất kỳ tài nguyên nào về so sánh không nhạy cảm trong trường hợp trong Mục tiêu C không? Nó dường như không có một phương pháp tương đương vớistr1.equalsIgnoreCase(str2)
Bất cứ ai cũng có thể chỉ cho tôi bất kỳ tài nguyên nào về so sánh không nhạy cảm trong trường hợp trong Mục tiêu C không? Nó dường như không có một phương pháp tương đương vớistr1.equalsIgnoreCase(str2)
Câu trả lời:
if( [@"Some String" caseInsensitiveCompare:@"some string"] == NSOrderedSame ) {
// strings are equal except for possibly case
}
Tài liệu được đặt tại Phương pháp tìm kiếm và so sánh
NSStringđó trả về một giá trị boolean. Sau đó, nếu chuỗi nhận là nil, toàn bộ phương thức trả về NO.
NSString *stringA;
NSString *stringB;
if (stringA && [stringA caseInsensitiveCompare:stringB] == NSOrderedSame) {
// match
}
Lưu ý: stringA && là cần thiết vì khi stringAlà nil:
stringA = nil;
[stringA caseInsensitiveCompare:stringB] // return 0
và vì vậy xảy ra NSOrderedSamecũng được định nghĩa là 0.
Ví dụ sau đây là một cạm bẫy điển hình:
NSString *rank = [[NSUserDefaults standardUserDefaults] stringForKey:@"Rank"];
if ([rank caseInsensitiveCompare:@"MANAGER"] == NSOrderedSame) {
// what happens if "Rank" is not found in standardUserDefaults
}
Một thay thế nếu bạn muốn kiểm soát nhiều hơn chỉ là trường hợp không nhạy cảm là:
[someString compare:otherString options:NSCaseInsensitiveSearch];
Tìm kiếm số và vô cảm dấu phụ là hai tùy chọn tiện dụng.
if ([someString compare:otherString options:NSCaseInsensitiveSearch] && someString.length > 0 && someString != (id)[NSNull null])
Bạn luôn có thể đảm bảo chúng trong cùng một trường hợp trước khi so sánh:
if ([[stringX uppercaseString] isEqualToString:[stringY uppercaseString]]) {
// They're equal
}
Lợi ích chính là bạn tránh được vấn đề tiềm ẩn được mô tả bởi matm liên quan đến việc so sánh các chuỗi số không. Bạn có thể kiểm tra chuỗi không trước khi thực hiện một trong các compare:options:phương thức hoặc bạn có thể lười biếng (như tôi) và bỏ qua chi phí bổ sung để tạo chuỗi mới cho mỗi so sánh (tối thiểu nếu bạn chỉ thực hiện một phương pháp hoặc hai so sánh).
caseInsensitiveCompare), hãy luôn sử dụng nó.
Một cách mới để làm điều này. iOS 8
let string: NSString = "Café"
let substring: NSString = "É"
string.localizedCaseInsensitiveContainsString(substring) // true
truecho "Café" và "É", đây chắc chắn KHÔNG phải là một câu trả lời đúng.
Chuyển đổi câu trả lời của Jason Coco thành Swift cho sự lười biếng sâu sắc :)
if ("Some String" .caseInsensitiveCompare("some string") == .OrderedSame)
{
// Strings are equal.
}
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"nhận được từ bất kỳ cuộc gọi khác và sẽ xảy ra lànil, bạnifsẽ cung cấp chotruenhư gửicaseInsensitiveComparetớinillà hợp lệ và kết quả trong mộtnilmà, trong trường hợp của chúng tôi, so vớiNSOrderedSamesẽ trở lạitrue(NSOrderedSameđược định nghĩa là 0). Đây có thể là một nguồn của các lỗi khá tàn phá, như trong trường hợp của tôi. Chúc mừng!