Wie kann ich überprüfen, ob eine Zeichenfolge ( NSString
) eine andere kleinere Zeichenfolge enthält?
Ich hatte auf so etwas gehofft wie:
NSString *string = @"hello bla bla";
NSLog(@"%d",[string containsSubstring:@"hello"]);
Aber das nächste, was ich finden konnte, war:
if ([string rangeOfString:@"hello"] == 0) {
NSLog(@"sub string doesnt exist");
}
else {
NSLog(@"exists");
}
Ist das der beste Weg, um herauszufinden, ob eine Zeichenfolge eine andere Zeichenfolge enthält?
if ([string rangeOfString:@"hello"] == 0) {...}
gibt es einen Typinkongruenzfehler für NSRange und int.if ([string rangeOfString:@"hello"].length == 0) {...}
Antworten:
Der Schlüssel bemerkt, dass
rangeOfString:
eineNSRange
Struktur zurückgegeben wird, und die Dokumentation besagt, dass die Struktur zurückgegeben wird,{NSNotFound, 0}
wenn der "Heuhaufen" die "Nadel" nicht enthält.Wenn Sie mit iOS 8 oder OS X Yosemite arbeiten, können Sie jetzt Folgendes tun: (* HINWEIS: Dies wird Ihre App zum Absturz bringen, wenn dieser Code auf einem iOS7-Gerät aufgerufen wird.)
(So würde es auch in Swift funktionieren)
👍
quelle
[string rangeOfString:@"bla"].location != NSNotFound
sein wird wahr , wenn Stringnil
!Für iOS 8.0+ und macOS 10.10+ können Sie NSStrings native verwenden
containsString:
.Für ältere Versionen von iOS und macOS können Sie eine eigene (veraltete) Kategorie für NSString erstellen:
Hinweis: Beachten Sie den Kommentar von Daniel Galasko zur Benennung
quelle
return [self rangeOfString:substring].location != NSNotFound;
Einzeiler gemacht und ihn in meine Refactoring-Bibliothek es_ios_utils aufgenommen. github.com/peterdeweese/es_ios_utilsDa dies bei Google ein hochrangiges Ergebnis zu sein scheint, möchte ich Folgendes hinzufügen:
iOS 8 und OS X 10.10 fügen die
containsString:
Methode hinzuNSString
. Eine aktualisierte Version von Dave DeLongs Beispiel für diese Systeme:quelle
// Alternativ können Sie auch Folgendes verwenden:
quelle
Mit iOS 8 und Swift können wir die
localizedCaseInsensitiveContainsString
Methode verwendenquelle
Ich persönlich hasse
NSNotFound
es wirklich, aber ich verstehe seine Notwendigkeit.Einige Leute verstehen jedoch möglicherweise nicht die Komplexität des Vergleichs mit NSNotFound
Zum Beispiel dieser Code:
hat seine Probleme:
1) Offensichtlich, wenn
otherString = nil
dieser Code abstürzt. Ein einfacher Test wäre:führt zu !! ABSTURZ !!
2) Was für jemanden, der neu in Objective-C ist, nicht so offensichtlich ist, ist, dass derselbe Code NICHT abstürzt, wenn
string = nil
. Zum Beispiel dieser Code:und dieser Code:
wird beides ergeben
Welches ist eindeutig nicht das, was Sie wollen.
Die bessere Lösung, von der ich glaube, dass sie funktioniert, besteht darin, die Tatsache zu verwenden, dass rangeOfString die Länge 0 zurückgibt. Ein zuverlässigerer Code ist also folgender:
ODER EINFACH:
welches für die Fälle 1 und 2 zurückkehren wird
Das sind meine 2 Cent ;-)
Bitte überprüfen Sie meine Liste für weitere hilfreiche Codes.
quelle
Eine verbesserte Version der Lösung von P i , einer Kategorie in NSString, die nicht nur anzeigt, ob eine Zeichenfolge in einer anderen Zeichenfolge gefunden wird, sondern auch einen Referenzbereich verwendet, lautet:
Verwenden Sie es wie:
quelle
Hier ist ein Funktionsausschnitt zum Kopieren und Einfügen:
quelle
Oneliner (kleinere Codemenge. TROCKEN, da Sie nur einen haben
NSLog
):quelle
quelle
Versuche dies,
quelle
Beste Lösung. So einfach ist das! Wenn Sie ein Wort oder einen Teil der Zeichenfolge suchen möchten. Sie können diesen Code verwenden. In diesem Beispiel werden wir prüfen, ob der Wert von word "acter" enthält.
quelle
In Swift 4:
quelle
Wenn Sie dies einmal brauchen, schreiben Sie:
quelle
Im Falle einer schnellen kann dies verwendet werden
quelle
Wenn Sie sich nicht um Groß- und Kleinschreibung kümmern. Versuchen Sie dies einmal.
quelle
Bitte benutzen Sie diesen Code
quelle
Verwenden Sie die Option NSCaseInsensitiveSearch mit rangeOfString: options:
Ausgabeergebnis wird gefunden: Ja
Die Optionen können zusammen "or'ed" sein und umfassen:
NSCaseInsensitiveSearch NSLiteralSearch NSBackwardsSearch und mehr
quelle
Erste Zeichenfolge enthält oder nicht zweite Zeichenfolge,
quelle
Versuche dies:
Swift 4.1, 4.2:
Für Ziel-C:
quelle
Swift 4 und höher
Ziel c
quelle
quelle
String
Typ. Zweitens haben wir alle Objekte. Als Argument sollten Sie also bestehenNSString
. Ich stimme für die Löschung aufgrund der schlechten Qualität einer Antwort unter hochaktiven Fragen.Wenn eine bestimmte Position der Zeichenfolge benötigt wird, wird dieser Code in Swift 3.0 eingefügt :
quelle