Supprimer les caractères de NSString?


95
NSString *myString = @"A B C D E F G";

Je veux supprimer les espaces, donc la nouvelle chaîne serait "ABCDEFG".

Réponses:


280

Vous pouvez utiliser:

NSString *stringWithoutSpaces = [myString 
   stringByReplacingOccurrencesOfString:@" " withString:@""];

Veuillez mettre en forme les extraits de code dans une police à espacement fixe pour plus de lisibilité. À l'heure actuelle, distinguer la première corde est un peu délicat
Mike Abdullah

4
Notez que «occurrences» est orthographié avec deux r.

plus 1 dans l'espoir d'atteindre 256. smh
Will Von Ullrich

Cela fonctionne UNIQUEMENT si les «espaces» se comportent correctement. Valeur ASCII = 32 (% 20) caractères. Pour supprimer TOUS les caractères d'espace blanc possibles, utilisez la solution de Jim Dovey ci-dessous.
Linges du

80

Si vous souhaitez prendre en charge plusieurs espaces à la fois, ou prendre en charge n'importe quel espace, vous pouvez le faire:

NSString* noSpaces =
    [[myString componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]
                           componentsJoinedByString:@""];

5
C'est plus utile pour un usage général.
mxg

je l'aime! Je souhaite supprimer tous les caractères spéciaux d'un numéro de téléphone et ne conserver que les chiffres.
karim

beaucoup plus simple: yourString = [yourString stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceCharacterSet]];
Daniel

3
Le rognage ne supprime que les caractères correspondants lorsqu'ils apparaissent au début et à la fin de la chaîne, ainsi `ABCDEF` deviendrait A B C D E F.
Jim Dovey

11

Tiré de NSString

stringByReplacingOccurrencesOfString:withString:

Renvoie une nouvelle chaîne dans laquelle toutes les occurrences d'une chaîne cible dans le récepteur sont remplacées par une autre chaîne donnée.

- (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement

Paramètres

cible

The string to replace.

remplacement

The string with which to replace target.

Valeur de retour

Une nouvelle chaîne dans laquelle toutes les occurrences de cible dans le récepteur sont remplacées par remplacement.


11

Tout ce qui précède fonctionnera bien. Mais la bonne méthode est la suivante:

yourString = [yourString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

Cela fonctionnera comme une méthode TRIM. Cela supprimera tous les espaces avant et arrière.

Merci


7
Non, cela ne supprime que les espaces du début et de la fin de la chaîne, pas les espaces entre les autres caractères.
Jim Dovey

@JimDovey Je mentionne déjà cette chose dans mon commentaire. #Cela fonctionnera comme une méthode TRIM. Il supprimera tous les espaces avant et arrière. #
Mitesh Khatri

2
@MiteshKhatri Oui, mais cela ne résout toujours pas le problème d'origine, qui consiste à supprimer tous les espaces du milieu de la chaîne, pas seulement les espaces de début et de fin.
Jim Dovey

@JimDovey pour supprimer tous les espaces, utilisez le code ci-dessous: MyStr = [MyStr stringByReplacingOccurrencesOfString: @ "" withString: @ ""];
Mitesh Khatri

1
Cela ne supprimera toujours que les caractères d'espace ASCII; des éléments tels que les espaces de largeur nulle, les espaces insécables Unicode, les retours à la ligne, les sauts de formulaire, les tabulations, les tabulations verticales, etc. resteront dans la chaîne. D'où l'existence de [NSCharacterSet whitespaceCharacterSet]et [NSCharacterSet whitespaceAndNewlineCharacterSet].
Jim Dovey

6

si la chaîne est mutable , vous pouvez la transformer en place en utilisant ce formulaire:

[string replaceOccurrencesOfString:@" "
                        withString:@""
                           options:0
                             range:NSMakeRange(0, string.length)];

ceci est également utile si vous souhaitez que le résultat soit une instance modifiable d'une chaîne d'entrée:

NSMutableString * string = [concreteString mutableCopy];
[string replaceOccurrencesOfString:@" "
                        withString:@""
                           options:0
                             range:NSMakeRange(0, string.length)];

3

Vous pouvez essayer ceci

- (NSString *)stripRemoveSpaceFrom:(NSString *)str {
    while ([str rangeOfString:@"  "].location != NSNotFound) {
        str = [str stringByReplacingOccurrencesOfString:@" " withString:@""];
    }
    return str;
}

Espérons que cela va vous aider.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.