web-dev-qa-db-fra.com

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

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

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

207
Xetius

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

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))
}
446
Rob Keniger

Vous pouvez utiliser:

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

hasPrefix fonctionne particulièrement bien. par exemple, si vous recherchez une URL http dans un NSString, vous utiliserez componentsSeparatedByString pour créer un NSArray et l'itération du tableau à l'aide de hasPrefix pour rechercher les éléments qui commencez 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 indiquant si une chaîne donnée correspond aux premiers caractères du destinataire.

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

le paramètre aString est une chaîne que vous recherchez. La valeur renvoyée est YES si une chaîne correspond aux caractères de début du récepteur, sinon, NON. Renvoie NO si aString est vide.

8
Iggy

Utilisez characterAtIndex: . Si le premier caractère est un astérisque, utilisez substringFromIndex: pour obtenir la chaîne sans '*'.

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

ne autre approche pour le faire ..

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

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

Pour une 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 de caractères commence par 10, code d'erreur utilisé pour identifier un problème donné.

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

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

Cela pourrait aider? :)

http://developer.Apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html#//Apple_ref/occ/instm/NSString/characterAtIndex :

Recherchez simplement le personnage à l’index 0 et comparez-le à la valeur recherchée!

1
djhworld
NSString* expectedString = nil;
if([givenString hasPrefix:@"*"])
{
   expectedString = [givenString substringFromIndex:1];
}
0
Vaibhav Shiledar

Ce joli petit morceau de code que j'ai trouvé par hasard, et je ne l'ai pas encore vu suggéré 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/les caractère (s) n’existent pas, cela n’affectera 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 à effectuer 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 aimez
  3. N'affecte pas le code environnant
0
App Dev Guy