Hallo Zusammen,
heute möchte ich euch zwei Methoden präsentieren mit welchen man nach Texten suchen kann.
-(BOOL)search:(NSString*)searchString inFullText:(NSString*)fullText{ if(searchString.length > 0 && fullText.length > 0 ){ NSRange isInRange = [fullText rangeOfString:searchString options:NSCaseInsensitiveSearch]; if(isInRange.location != NSNotFound) { return YES; }else{ return NO; } }else{ NSLog(@"empty strings"); return NO; } }
Diese Methode ermittelt einfach nur ob der übergebene Parameter searchString im ebenfalls übergebenen Parameter fullText enthalten ist. Die erwartete Antwort ist vom Typ BOOL – also entweder YES oder NO. Zu aller erst wird geprüft, ob die übergebenen String überhabt eine Länge > 0 haben. Falls dem nicht so ist, schreiben wir eine entsprechende Nachricht ins Log und beenden die Methode in dem wir NO zurückgeben.
Falls beide Texte einen Wert haben können wir sie miteinander vergleichen. Wir bedienen uns dabei NSRange und stellen die Suche auf Case Insensitive; das bedeutet wir ignorieren Groß- und Kleinschreibung.
Im nächsten Beispiel gestalten wir unsere Methode etwas komplexer. Wir erhalten nun ein Array welches Strings enthält. Es soll für jeden String des Arrays geprüft werden, ob der searchstring enthalten ist.
-(void)search:(NSString*)searchString inAnArray:(NSArray*)someArray{ NSMutableArray *resultArray = [NSMutableArray array]; if(searchString.length > 0 && [someArray count] > 0 ){ for (NSString *stringFromArray in someArray){ NSRange isInRange = [stringFromArray rangeOfString:searchString options:NSCaseInsensitiveSearch]; if(isInRange.location != NSNotFound) { // Text gefunden; prüfen ob er bereits im resultArray enthalten ist if (![resultArray containsObject:stringFromArray]){ [resultArray addObject:stringFromArray]; } } } }else{ NSLog(@"das Array oder Suchstring sind leer"); } // Auswertung des Ergebnisses if([resultArray count] > 0){ [self presentResults:resultArray]; }else{ NSLog(@"keine Übereinstimmung gefunden"); } }
Zuerst wird ein neues Array erstellt in dem wir alle Objekte des ursprunglichen Arrays speichern, die den gesuchten String enthalten. Anschließend erfolgt wieder die Abfrage ob ein suchen überhaupt Sinn macht. Mit for (NSString *stringFromArray in someArray) durchlaufen wir das Array und können über stringFromArray auf das bei diesem Schleifendurchlauf gerade aktuelle Objekt zugreifen. Wie eigentliche Prüfung erfolgt analog der ersten Methode.
Ist der Text in einem Objekt des Arrays gefunden und noch nicht im resultArray gespeichert, wird er hinzugefügt. Zu guter letzt rufen wir die Methode hier nicht näher beschriebene Methode [self presentResults:resultArray]; auf, sofern überhaupt Objekte im resultArray enthalten sind.
Frohes Suchen.