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.

Xetius
quelle

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))
}
Rob Keniger
quelle
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
^^ Siehe meine Frage hier: stackoverflow.com/questions/18019660/…
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];
}
Chris Long
quelle
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.

Iggy
quelle
4

Verwenden Sie characterAtIndex:. Wenn das erste Zeichen ein Sternchen ist, verwenden Sie substringFromIndex:, um die Zeichenfolge ohne '*' abzurufen.

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

Ein anderer Ansatz, um es zu tun ..

Möge es jemandem helfen ...

if ([[temp substringToIndex:4] isEqualToString:@"http"]) {
  //starts with http
}
Zar E Ahmer
quelle
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
}
Kyle Clegg
quelle
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
App Dev Guy
quelle
0
NSString* expectedString = nil;
if([givenString hasPrefix:@"*"])
{
   expectedString = [givenString substringFromIndex:1];
}
Vaibhav Shiledar
quelle