Adakah yang bisa mengarahkan saya ke sumber daya apa pun tentang perbandingan kasus sensitif di Objective C? Tampaknya tidak memiliki metode yang setarastr1.equalsIgnoreCase(str2)
Adakah yang bisa mengarahkan saya ke sumber daya apa pun tentang perbandingan kasus sensitif di Objective C? Tampaknya tidak memiliki metode yang setarastr1.equalsIgnoreCase(str2)
Jawaban:
if( [@"Some String" caseInsensitiveCompare:@"some string"] == NSOrderedSame ) {
// strings are equal except for possibly case
}
Dokumentasi ini terletak di Metode Pencarian dan Perbandingan
NSStringyang mengembalikan boolean. Kemudian jika string penerima nil, metode secara keseluruhan kembali NO.
NSString *stringA;
NSString *stringB;
if (stringA && [stringA caseInsensitiveCompare:stringB] == NSOrderedSame) {
// match
}
Catatan: stringA && diperlukan karena ketika stringAadalah nil:
stringA = nil;
[stringA caseInsensitiveCompare:stringB] // return 0
dan yang terjadi NSOrderedSamejuga didefinisikan sebagai 0.
Contoh berikut adalah perangkap khas:
NSString *rank = [[NSUserDefaults standardUserDefaults] stringForKey:@"Rank"];
if ([rank caseInsensitiveCompare:@"MANAGER"] == NSOrderedSame) {
// what happens if "Rank" is not found in standardUserDefaults
}
Alternatif jika Anda ingin kontrol lebih dari sekadar ketidakpekaan kasus adalah:
[someString compare:otherString options:NSCaseInsensitiveSearch];
Pencarian numerik dan ketidakpekaan diakritik adalah dua pilihan praktis.
if ([someString compare:otherString options:NSCaseInsensitiveSearch] && someString.length > 0 && someString != (id)[NSNull null])
Anda selalu dapat memastikan bahwa mereka berada dalam kasus yang sama sebelum perbandingan:
if ([[stringX uppercaseString] isEqualToString:[stringY uppercaseString]]) {
// They're equal
}
Manfaat utama adalah Anda menghindari masalah potensial yang dijelaskan oleh matm tentang membandingkan string nil Anda bisa memeriksa string tidak nol sebelum melakukan salah satu compare:options:metode, atau Anda bisa malas (seperti saya) dan mengabaikan biaya tambahan untuk membuat string baru untuk setiap perbandingan (yang minimal jika Anda hanya melakukan satu atau dua perbandingan).
caseInsensitiveCompare), selalu gunakan itu.
- (NSComparisonResult)caseInsensitiveCompare:(NSString *)aString
Cara baru untuk melakukan ini. iOS 8
let string: NSString = "Café"
let substring: NSString = "É"
string.localizedCaseInsensitiveContainsString(substring) // true
trueuntuk "Café" dan "É", ini jelas BUKAN jawaban yang benar.
Mengonversi jawaban Jason Coco ke Swift untuk orang yang sangat malas :)
if ("Some String" .caseInsensitiveCompare("some string") == .OrderedSame)
{
// Strings are equal.
}
Pada macOS Anda cukup menggunakan -[NSString isCaseInsensitiveLike:], yang mengembalikan BOOLseperti -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"diterima dari panggilan lain dan kebetulannil, Andaifakan memberikantruesebagai pengirimancaseInsensitiveComparekenilvalid dan menghasilkan yang lainnil, dalam kasus kami, dibandingkan denganNSOrderedSameakan kembalitrue(NSOrderedSamedidefinisikan sebagai 0). Ini bisa menjadi sumber bug yang sangat menghancurkan, seperti dalam kasus saya. Bersulang!