Comment vérifier si NSString commence par un certain caractère

210

Comment vérifiez-vous si une chaîne NSString commence par un certain caractère (le caractère *).

Le * est un indicateur du type de cellule, j'ai donc besoin du contenu de cette chaîne NSString sans le *, mais j'ai besoin de savoir si le * existe.

Xetius
la source

Réponses:

453

Vous pouvez utiliser la -hasPrefix:méthode de NSString:

Objectif c:

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

Rapide:

var output:String?
if string.hasPrefix("*") {
    output = string.substringFromIndex(string.startIndex.advancedBy(1))
}
Rob Keniger
la source
Existe-t-il un moyen d'utiliser cette même méthode, mais au lieu de hasPrefix:@"word"vérifier les valeurs multiples stockées dans un NSArray? Par exemple NSArray *words = [NSArray arrayWithObjects:@"foo",@"bar",@"baz",nil];:?
adamdehaven
^^ Voir ma question ici: stackoverflow.com/questions/18019660/…
adamdehaven
Bonne réponse! Merci @Rob Keniger
Ganesh Guturi
1
CFStringHasPrefix () peut également être utilisé sur les NSStrings en raison du "Toll Free Bridging". Les performances de CFStringHasPrefix () semblent être 2-3 fois meilleures (au moins lors de l'utilisation de mon ensemble de données). Donc, si vous l'utilisez dans une zone sensible aux performances, vous voudrez peut-être essayer CFStringHasPrefix () à la place.
John Bowers
12

Vous pouvez utiliser:

NSString *newString;
if ( [[myString characterAtIndex:0] isEqualToString:@"*"] ) {
     newString = [myString substringFromIndex:1];
}
Chris Long
la source
3
Vous ne pouvez pas envoyer de messages à unichars, et ils ne seront probablement pas égaux à NSStrings.
Chuck
8

hasPrefix fonctionne particulièrement bien. par exemple, si vous cherchiez une URL http dans un NSString, vous utiliseriez componentsSeparatedByStringpour créer un NSArrayet itérer le tableau en utilisant hasPrefixpour trouver les éléments commençant par 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 renvoie une valeur booléenne qui indique si une chaîne donnée correspond aux premiers caractères du récepteur.

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

Le paramètre aStringest une chaîne que vous recherchez. La valeur de retour est YES si une chaîne correspond aux premiers caractères du récepteur, sinon NON. Renvoie NO si aStringest vide.

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

Une autre approche pour le faire ..

Puisse-t-il aider quelqu'un ...

if ([[temp substringToIndex:4] isEqualToString:@"http"]) {
  //starts with http
}
Zar E Ahmer
la source
3

Comme réponse plus générale, essayez d'utiliser la méthode hasPrefix. Par exemple, le code ci-dessous vérifie si une chaîne commence par 10, qui est le code d'erreur utilisé pour identifier un certain problème.

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

if([myString hasPrefix:@"10"]) {
      //display more elegant error message
}
Kyle Clegg
la source
0

Ce joli petit bout de code que j'ai trouvé par hasard, et je n'ai pas encore vu le suggérer sur Stack. Cela ne fonctionne que si les caractères que vous souhaitez supprimer ou modifier existent, ce qui est pratique dans de nombreux scénarios. Si le ou les caractères n'existent pas, cela ne modifiera pas votre NSString:

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

Voici comment je l'utilise:

//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);

Cette ligne est super facile à réaliser trois actions en une:

  1. Vérifie votre chaîne pour le caractère / s que vous ne voulez pas
  2. Peut les remplacer par ce que vous voulez
  3. N'affecte pas le code environnant
App Dev Guy
la source
0
NSString* expectedString = nil;
if([givenString hasPrefix:@"*"])
{
   expectedString = [givenString substringFromIndex:1];
}
Vaibhav Shiledar
la source