2010-03-23 14 views

Antwort

421

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

Objective-C:

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

Swift:

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

Wunderbar! Vielen Dank! – mbm29414

+0

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

+0

^^ Siehe meine Frage hier: http://stackoverflow.com/questions/18019660/check-if-nsstring-hasprefix-that-is-contained-in-nsarray – adamdehaven

12

können Sie verwenden:

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

Sie keine Nachrichten an Unichars senden können, und sie werden wahrscheinlich nicht zu NSStrings gleich sein. – Chuck

+0

Guter Punkt. Bearbeitet ... –

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

hasPrefix funktioniert besonders gut. Wenn Sie beispielsweise nach einer http-URL in einer NSString suchen, verwenden Sie componentsSeparatedByString, um eine NSArray zu erstellen, und iterieren Sie das Array mithilfe von hasPrefix, um die Elemente zu finden, die mit http beginnen.

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, der angibt, ob die Anfangszeichen des Empfängers eine bestimmte Zeichenfolge entspricht.

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

Parameter aString ist eine Zeichenfolge, die Sie suchen Rückgabewert ist YES, wenn aString die Anfangszeichen des Empfängers übereinstimmt, andernfalls NO. Gibt NEIN zurück, wenn aString leer ist.

3

Als eine allgemeinere Antwort versuchen Sie, die hasPrefix-Methode zu verwenden. Der folgende Code überprüft beispielsweise, ob eine Zeichenfolge mit 10 beginnt. Dies ist der Fehlercode, der zur Identifizierung eines bestimmten Problems verwendet wird.

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

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

Ein anderer Ansatz, es zu tun ..

es jemand helfen kann, ...

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

Dieses nette wenig Code, den ich durch Zufall gefunden, und ich habe noch zu Siehe es auf Stack vorgeschlagen. Es funktioniert nur, wenn die Zeichen, die Sie entfernen oder ändern möchten, vorhanden sind, was in vielen Szenarien praktisch ist.Wenn das Zeichen/s nicht vorhanden ist, wird es nicht Ihren NSString ändern:

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

Dies ist, wie ich es verwenden:

//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 Linie ist super einfach drei Aktionen in einer durchzuführen :

  1. Prüft die Zeichenfolge für das Zeichen/s Sie wollen nicht
  2. Kann sie mit ersetzt, was auch immer Sie mögen
  3. Hat keinen Einfluss auf Code umgebende
0
NSString* expectedString = nil; 
if([givenString hasPrefix:@"*"]) 
{ 
    expectedString = [givenString substringFromIndex:1]; 
} 
Verwandte Themen