1281 Stimmen

Wie überprüfe ich, ob ein String einen anderen String in Objective-C enthält?

Wie kann ich überprüfen, ob ein String (NSString) einen anderen kleineren String enthält?

Ich hatte gehofft, etwas Ähnliches zu finden:

NSString *string = @"hallo bla bla";
NSLog(@"%d",[string containsSubstring:@"hallo"]);

Aber das Nächste, was ich finden konnte, war:

if ([string rangeOfString:@"hallo"] == 0) {
    NSLog(@"Teil-String existiert nicht");
} 
else {
    NSLog(@"existiert");
}

Ist das jedenfalls die beste Methode, um festzustellen, ob ein String einen anderen String enthält?

2490voto

Dave DeLong Punkte 240835
NSString *string = @"hello bla bla";
if ([string rangeOfString:@"bla"].location == NSNotFound) {
  NSLog(@"string does not contain bla");
} else {
  NSLog(@"string contains bla!");
}

Der Schlüssel liegt darin zu bemerken, dass rangeOfString: eine NSRange Struktur zurückgibt, und die Dokumentation sagt, dass sie die Struktur {NSNotFound, 0} zurückgibt, wenn der "Heuhaufen" die "Nadel" nicht enthält.


Und wenn Sie auf iOS 8 oder OS X Yosemite sind, können Sie jetzt Folgendes tun: (* HINWEIS: Dies CRASHT Ihre App, wenn dieser Code auf einem iOS7-Gerät aufgerufen wird).

NSString *string = @"hello bla blah";
if ([string containsString:@"bla"]) {
  NSLog(@"String enthält bla!");
} else {
  NSLog(@"String enthält nicht bla");
}

(So funktioniert es auch in Swift)

168voto

P i Punkte 26726

Für iOS 8.0+ und macOS 10.10+ können Sie das native containsString: von NSString verwenden.

Für ältere Versionen von iOS und macOS können Sie Ihre eigene (veraltete) Kategorie für NSString erstellen:

@interface NSString ( SubstringSearch )
    - (BOOL)containsString:(NSString *)substring;
@end

// - - - - 

@implementation NSString ( SubstringSearch )

- (BOOL)containsString:(NSString *)substring
{    
    NSRange range = [self rangeOfString : substring];
    BOOL found = ( range.location != NSNotFound );
    return found;
}

@end

Hinweis: Beachten Sie den Kommentar von Daniel Galasko unten zur Benennung

60voto

Lukas Punkte 2993

Weil dies offensichtlich ein hochrangiges Ergebnis in Google zu sein scheint, möchte ich dies hinzufügen:

iOS 8 und OS X 10.10 fügen der containsString:-Methode zu NSString hinzu. Eine aktualisierte Version von Dave DeLongs Beispiel für diese Systeme:

NSString *string = @"hello bla bla";
if ([string containsString:@"bla"]) {
    NSLog(@"String enthält bla!");
} else {
    NSLog(@"String enthält nicht bla");
}

41voto

AJS Punkte 1403
NSString *myString = @"hello bla bla";
NSRange rangeValue = [myString rangeOfString:@"hello" options:NSCaseInsensitiveSearch];

if (rangeValue.length > 0)
{
    NSLog(@"string contains hello");
} 
else 
{
    NSLog(@"string does not contain hello!");
}

//Alternativ können Sie auch Folgendes verwenden :

if (rangeValue.location == NSNotFound) 
{
    NSLog(@"String enthält kein hallo");
} 
else 
{
    NSLog(@"String enthält Hallo!");
}

24voto

Govind Punkte 2279

Mit iOS 8 und Swift können wir die Methode localizedCaseInsensitiveContainsString verwenden

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

 string.localizedCaseInsensitiveContainsString(substring) // true

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X