web-dev-qa-db-de.com

Vergleich zwischen Groß- und Kleinschreibung NSString

Kann mich jemand auf irgendwelche Ressourcen zum Vergleich der Vergleichbarkeit von Groß- und Kleinschreibung in Objective C verweisen? Es scheint keine äquivalente Methode zu str1.equalsIgnoreCase(str2) zu haben.

226
if( [@"Some String" caseInsensitiveCompare:@"some string"] == NSOrderedSame ) {
  // strings are equal except for possibly case
}

Die Dokumentation befindet sich unter Such- und Vergleichsmethoden

537
Jason Coco
 NSString *stringA;
 NSString *stringB;

 if (stringA && [stringA caseInsensitiveCompare:stringB] == NSOrderedSame) {
     // match
 }

Hinweis: stringA && ist erforderlich, wenn stringAnil ist:

 stringA = nil;
 [stringA caseInsensitiveCompare:stringB] // return 0

und so passiert NSOrderedSame auch als 0 definiert.

Das folgende Beispiel ist eine typische Fallstricke:

 NSString *rank = [[NSUserDefaults standardUserDefaults] stringForKey:@"Rank"];
 if ([rank caseInsensitiveCompare:@"MANAGER"] == NSOrderedSame) {
     // what happens if "Rank" is not found in standardUserDefaults
 }
48
ohho

Eine Alternative, wenn Sie mehr Kontrolle als nur die Unempfindlichkeit bei Groß- und Kleinschreibung wünschen, ist:

[someString compare:otherString options:NSCaseInsensitiveSearch];

Numerische Suche und diakritische Unempfindlichkeit sind zwei nützliche Optionen.

46
drawnonward

Sie können immer sicherstellen, dass sie vor dem Vergleich in demselben Fall sind:

if ([[stringX uppercaseString] isEqualToString:[stringY uppercaseString]]) {
    // They're equal
}

Der Hauptvorteil ist, dass Sie das von matm beschriebene potenzielle Problem beim Vergleich von Null-Saiten vermeiden. Sie können entweder überprüfen, ob die Zeichenfolge nicht gleich Null ist, bevor Sie eine der compare:options:-Methoden ausführen, oder Sie könnten (wie ich) faul sein und die zusätzlichen Kosten für das Erstellen einer neuen Zeichenfolge für jeden Vergleich ignorieren (was nur der Fall ist, wenn Sie dies nur tun.) ein oder zwei Vergleiche).

22
chrysAllwood

Ein neuer Weg, dies zu tun. iOS 8

let string: NSString = "Café"
let substring: NSString = "É"

string.localizedCaseInsensitiveContainsString(substring) // true
7
iGo
- (NSComparisonResult)caseInsensitiveCompare:(NSString *)aString
7
WhirlWind

Versuchen Sie diese Methode 

- (NSComparisonResult)caseInsensitiveCompare:(NSString *)aString
6
Reena

Jason Cocos Antwort in Swift für tief faul :) konvertieren 

if ("Some String" .caseInsensitiveCompare("some string") == .OrderedSame)
{
  // Strings are equal.
}
6
Tasik

mit dem Präfix wie in der iPhone ContactApp überprüfen 

([string rangeOfString:prefixString options:NSCaseInsensitiveSearch].location == 0)

dieser Blog war für mich nützlich

5
iMeMyself

Alternative Lösung für Swift:

Um beide UpperCase zu machen:

z.B:

if ("ABcd".uppercased() == "abcD".uppercased()){
}

oder um beide LowerCase zu machen:

z.B:

if ("ABcd".lowercased() == "abcD".lowercased()){
}
1
FARAZ

Unter macOS können Sie einfach -[NSString isCaseInsensitiveLike:] verwenden, wodurch BOOL genauso wie -isEqual: zurückgegeben wird.

if ([@"Test" isCaseInsensitiveLike: @"test"])
    // Success
0
mangerlahn