Objective Cでの大文字と小文字を区別しない比較に関するリソースを誰かに教えてもらえますか?それは同等の方法を持っていないようですstr1.equalsIgnoreCase(str2)
Objective Cでの大文字と小文字を区別しない比較に関するリソースを誰かに教えてもらえますか?それは同等の方法を持っていないようですstr1.equalsIgnoreCase(str2)
回答:
if( [@"Some String" caseInsensitiveCompare:@"some string"] == NSOrderedSame ) {
// strings are equal except for possibly case
}
ドキュメントは検索と比較方法にあります
NSString
ブール値を返すカテゴリ内のメソッドとして実装することです。次に、受信文字列がのnil
場合、メソッドは全体として戻りますNO
。
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];
数値検索と分音無感覚は、2つの便利なオプションです。
if ([someString compare:otherString options:NSCaseInsensitiveSearch] && someString.length > 0 && someString != (id)[NSNull null])
比較する前に、常に同じケースであることを確認できます。
if ([[stringX uppercaseString] isEqualToString:[stringY uppercaseString]]) {
// They're equal
}
主な利点は、nil文字列の比較に関してmatmによって説明される潜在的な問題を回避できることです。compare:options:
メソッドの1つを実行する前に文字列がnilでないことを確認するか、または(私のように)怠惰で、比較ごとに新しい文字列を作成する追加のコストを無視することができます(1つだけを実行している場合は最小限です)または2つの比較)。
caseInsensitiveCompare
)がある場合は、常にそれを使用してください。
これを行う新しい方法。iOS 8
let string: NSString = "Café"
let substring: NSString = "É"
string.localizedCaseInsensitiveContainsString(substring) // true
true
「カフェ」と「É」に戻る場合、これは間違いなく正しい答えではありません。
非常に怠惰な:)のためにジェイソンココの回答をスウィフトに変換する
if ("Some String" .caseInsensitiveCompare("some string") == .OrderedSame)
{
// Strings are equal.
}
MacOSで、あなたは、単に使用することができます-[NSString isCaseInsensitiveLike:]
返す、BOOL
同じように-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"
他のコールから受信したことを起こるされnil
、あなたがif
与えるtrue
送信などcaseInsensitiveCompare
にnil
有効であり、他で結果nil
我々の場合には、と比較して、NSOrderedSame
返しますtrue
(NSOrderedSame
0と定義されます)。これは、私の場合のように、非常に壊滅的なバグの原因となる可能性があります。乾杯!