web-dev-qa-db-fra.com

Objective-C - Supprimer le dernier caractère de la chaîne

Dans Objective-C pour iOS, comment puis-je supprimer le dernier caractère d'une chaîne à l'aide d'une action de bouton?

150
Omar

Dans votre classe de contrôleur, créez une méthode d'action à laquelle vous relierez le bouton dans Interface Builder. Dans cette méthode, vous pouvez couper votre chaîne comme ceci:


if ([string length] > 0) {
    string = [string substringToIndex:[string length] - 1];
} else {
    //no characters to delete... attempting to do so will result in a crash
}






Si vous voulez une manière élégante de faire cela dans une seule ligne de code, vous pouvez l'écrire ainsi:

string = [string substringToIndex:string.length-(string.length>0)];

* Explication d'extrait de code fantaisie sur une ligne:

S'il y a un caractère à supprimer (c'est-à-dire que la longueur de la chaîne est supérieure à 0)
(string.length>0) résultats 1 rendant ainsi le code retourné:
string = [string substringToIndex:string.length-1];

S'il n'y a PAS de caractère à supprimer (c'est-à-dire que la longueur de la chaîne n'est PAS supérieure à 0)
(string.length>0) résultats 0 rendant ainsi le code retourné:
string = [string substringToIndex:string.length-0];
Ce qui empêche les accidents.

416
Marc Charbonneau

S'il s'agit d'un NSMutableString (que je vous recommanderais, car vous le modifiez de manière dynamique), vous pouvez utiliser:

[myString deleteCharactersInRange:NSMakeRange([myRequestString length]-1, 1)];
52
Dave DeLong

En fait, les solutions données ici ne prennent pas en compte les caractères Unicode multi-octets ("caractères composés") et peuvent entraîner des chaînes Unicode non valides.

En fait, le fichier d'en-tête iOS contenant la déclaration de substringToIndex contient le commentaire suivant:

Astuce: à utiliser avec rangeOfComposedCharacterSequencesForRange: pour éviter de briser les caractères composés

Voir comment utiliser rangeOfComposedCharacterSequenceAtIndex: pour supprimer correctement le dernier caractère.

8
user1071136

La documentation est votre ami, NSString prend en charge un appel substringWithRange qui peut raccourcir la chaîne et renvoyer la chaîne raccourcie. Vous ne pouvez pas modifier une instance de NSString car elle est immuable. Si vous avez un NSMutableStringa une méthode appelée deleteCharactersInRange qui peut modifier la chaîne en place

...
NSRange r;
r.location = 0;
r.size = [mutable length]-1;
NSString* shorted = [stringValue substringWithRange:r];
...
6
Harald Scheirich