281 votes

Remplacement de chaînes de caractères en Objective-C

Comment remplacer un caractère dans une chaîne de caractères en Objective-C ?

794voto

epatel Points 32451

Vous pouvez utiliser la méthode

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

...pour obtenir une nouvelle chaîne avec une sous-chaîne remplacée (voir NSString documentation pour les autres)

Exemple d'utilisation

NSString *str = @"This is a string";

str = [str stringByReplacingOccurrencesOfString:@"string"
                                     withString:@"duck"];

2 votes

Je pensais que l'intérêt d'avoir NSString et une sous-classe NSMutableString était qu'une instance de NSString est immuable . Bien que - comme toute personne saine d'esprit, je préfère avoir des canards que des cordes n'importe quand - le fait que vous venez d'écraser le contenu de str m'a époustouflé.

1 votes

Mais je suppose que l'adresse de str changé au cours du processus

16 votes

Elle ne change pas. str contient maintenant une toute nouvelle chaîne. stringByReplacingOccurencesOfString ne modifie PAS la chaîne. Elle renvoie simplement une nouvelle chaîne.

22voto

mipadi Points 135410

NSString sont immuables (ils ne peuvent pas être modifiés), mais il existe une sous-classe mutable, NSMutableString qui vous propose plusieurs méthodes pour remplacer des caractères dans une chaîne de caractères. C'est probablement votre meilleure option.

10voto

tania_S Points 953

Si vous voulez remplacer plusieurs chaînes de caractères :

NSString *s = @"foo/bar:baz.foo";
NSCharacterSet *doNotWant = [NSCharacterSet characterSetWithCharactersInString:@"/:."];
s = [[s componentsSeparatedByCharactersInSet: doNotWant] componentsJoinedByString: @""];
NSLog(@"%@", s); // => foobarbazfoo

8voto

Marlon Ruiz Points 1176

Il est également possible de remplacer une chaîne de caractères avec stringByReplacingCharactersInRange:withString :

for (int i = 0; i < card.length - 4; i++) {

    if (![[card substringWithRange:NSMakeRange(i, 1)] isEqual:@" "]) {

        NSRange range = NSMakeRange(i, 1);
        card = [card stringByReplacingCharactersInRange:range withString:@"*"];

    }

} //out: **** **** **** 1234

0voto

Meir Points 309

Le problème existe dans les anciennes versions de l'iOS. Dans la dernière, la droite à gauche fonctionne bien. Ce que j'ai fait, est le suivant :

Je vérifie d'abord la version iOS :

if (![self compareCurVersionTo:4 minor:3 point:0])

Than :

// set RTL on the start on each line (except the first)  
myUITextView.text = [myUITextView.text stringByReplacingOccurrencesOfString:@"\n"
                                                           withString:@"\u202B\n"];

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X