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
NSString
yang 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 stringA
adalah nil
:
stringA = nil;
[stringA caseInsensitiveCompare:stringB] // return 0
dan yang terjadi NSOrderedSame
juga 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
true
untuk "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 BOOL
seperti -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
, Andaif
akan memberikantrue
sebagai pengirimancaseInsensitiveCompare
kenil
valid dan menghasilkan yang lainnil
, dalam kasus kami, dibandingkan denganNSOrderedSame
akan kembalitrue
(NSOrderedSame
didefinisikan sebagai 0). Ini bisa menjadi sumber bug yang sangat menghancurkan, seperti dalam kasus saya. Bersulang!