So überprüfen Sie, ob NSString mit einem bestimmten Zeichen beginnt


210

Wie überprüfen Sie, ob ein NSString mit einem bestimmten Zeichen (dem Zeichen *) beginnt?

Das * ist ein Indikator für den Typ der Zelle, daher benötige ich den Inhalt dieses NSStrings ohne das *, muss aber wissen, ob das * vorhanden ist.

Antworten:


453

Sie können die -hasPrefix:Methode verwenden von NSString:

Ziel c:

NSString* output = nil;
if([string hasPrefix:@"*"]) {
    output = [string substringFromIndex:1];
}

Schnell:

var output:String?
if string.hasPrefix("*") {
    output = string.substringFromIndex(string.startIndex.advancedBy(1))
}

Gibt es eine Möglichkeit, dieselbe Methode zu verwenden, aber anstatt hasPrefix:@"word"nach mehreren Werten zu suchen, die in einem gespeichert sind NSArray? Zum Beispiel : NSArray *words = [NSArray arrayWithObjects:@"foo",@"bar",@"baz",nil];?
Adamdehaven


Gute Antwort! Vielen Dank, dass Sie @Rob Keniger
Ganesh Guturi

1
CFStringHasPrefix () kann aufgrund von "Toll Free Bridging" auch für NSStrings verwendet werden. Die Leistung von CFStringHasPrefix () scheint 2-3 mal besser zu sein (zumindest bei Verwendung meines Datensatzes). Wenn Sie es also in einem leistungsempfindlichen Bereich verwenden, sollten Sie stattdessen CFStringHasPrefix () ausprobieren.
John Bowers

12

Sie können verwenden:

NSString *newString;
if ( [[myString characterAtIndex:0] isEqualToString:@"*"] ) {
     newString = [myString substringFromIndex:1];
}

3
Sie können keine Nachrichten an Unichars senden, und diese entsprechen wahrscheinlich nicht NSStrings.
Chuck

8

hasPrefix funktioniert besonders gut. zum Beispiel , wenn Sie suchen eine HTTP - URL in ein NSString, würden Sie componentsSeparatedByStringein erstellen NSArrayund die Iterierte das Array mit hasPrefixden Elementen zu finden , die beginnen mit http.

NSArray *allStringsArray = 
   [myStringThatHasHttpUrls componentsSeparatedByString:@" "]

for (id myArrayElement in allStringsArray) {
    NSString *theString = [myArrayElement description];
    if ([theString hasPrefix:@"http"]) {
        NSLog(@"The URL  is %@", [myArrayElement description]);
    }

}

hasPrefix Gibt einen Booleschen Wert zurück, der angibt, ob eine bestimmte Zeichenfolge mit den Anfangszeichen des Empfängers übereinstimmt.

- (BOOL)hasPrefix:(NSString *)aString, 

Der Parameter aStringist eine Zeichenfolge, nach der Sie suchen. Der Rückgabewert ist YES, wenn aString mit den Anfangszeichen des Empfängers übereinstimmt, andernfalls NO. Gibt NO zurück, wenn aStringes leer ist.



4
NSString *stringWithoutAsterisk(NSString *string) {
    NSRange asterisk = [string rangeOfString:@"*"];
    return asterisk.location == 0 ? [string substringFromIndex:1] : string;
}

4

Ein anderer Ansatz, um es zu tun ..

Möge es jemandem helfen ...

if ([[temp substringToIndex:4] isEqualToString:@"http"]) {
  //starts with http
}

3

Versuchen Sie als allgemeinere Antwort die hasPrefix-Methode. Der folgende Code prüft beispielsweise, ob eine Zeichenfolge mit 10 beginnt. Dies ist der Fehlercode, mit dem ein bestimmtes Problem identifiziert wird.

NSString* myString = @"10:Username taken";

if([myString hasPrefix:@"10"]) {
      //display more elegant error message
}


0

Dieses nette kleine Stück Code habe ich zufällig gefunden, und ich habe es noch nicht auf Stack vorgeschlagen. Dies funktioniert nur, wenn die Zeichen, die Sie entfernen oder ändern möchten, vorhanden sind, was in vielen Szenarien praktisch ist. Wenn die Zeichen nicht vorhanden sind, ändert dies nichts an Ihrem NSString:

NSString = [yourString stringByReplacingOccurrencesOfString:@"YOUR CHARACTERS YOU WANT TO REMOVE" withString:@"CAN either be EMPTY or WITH TEXT REPLACEMENT"];

So benutze ich es:

//declare what to look for
NSString * suffixTorRemove = @"</p>";
NSString * prefixToRemove = @"<p>";
NSString * randomCharacter = @"</strong>";
NSString * moreRandom = @"<strong>";
NSString * makeAndSign = @"&";

//I AM INSERTING A VALUE FROM A DATABASE AND HAVE ASSIGNED IT TO returnStr
returnStr = [returnStr stringByReplacingOccurrencesOfString:suffixTorRemove withString:@""];
returnStr = [returnStr stringByReplacingOccurrencesOfString:prefixToRemove withString:@""];
returnStr = [returnStr stringByReplacingOccurrencesOfString:randomCharacter withString:@""];
returnStr = [returnStr stringByReplacingOccurrencesOfString:moreRandom withString:@""];
returnStr = [returnStr stringByReplacingOccurrencesOfString:makeAndSign withString:@"&"];

//check the output
NSLog(@"returnStr IS NOW: %@", returnStr);

Diese eine Zeile ist super einfach, um drei Aktionen in einer auszuführen:

  1. Überprüft Ihre Zeichenfolge auf die Zeichen, die Sie nicht möchten
  2. Kann sie durch was auch immer ersetzen
  3. Beeinflusst nicht den umgebenden Code

0
NSString* expectedString = nil;
if([givenString hasPrefix:@"*"])
{
   expectedString = [givenString substringFromIndex:1];
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.