Remplacement de chaîne dans Objective-C

Réponses:

781

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 la NSStringdocumentation pour les autres)

Exemple d'utilisation

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

str = [str stringByReplacingOccurrencesOfString:@"string"
                                     withString:@"duck"];
epatel
la source
2
J'ai pensé que le point d'avoir NSString et une sous-classe NSMutableString était parce qu'une instance de NSString est immuable . Alors que - comme toute personne saine d'esprit, je préfère avoir des canards que des cordes tous les jours - le fait que vous ayez simplement écrasé le contenu de strça m'a époustouflé.
ele
1
Mais je suppose que l'adresse de strchangé dans le processus
Colas
16
ça ne change pas. str contient maintenant une toute nouvelle chaîne. stringByReplacingOccurencesOfString ne mute PAS la chaîne. Il retourne simplement une nouvelle chaîne.
Septiadi Agus
22

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

mipadi
la source
10

Si vous souhaitez remplacer plusieurs chaînes:

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

Il a également un remplacement de chaîne possible 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
Marlon Ruiz
la source
0

Le problème existe dans les anciennes versions sur iOS. dans le dernier, 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])

Que:

// set RTL on the start on each line (except the first)  
myUITextView.text = [myUITextView.text stringByReplacingOccurrencesOfString:@"\n"
                                                           withString:@"\u202B\n"];
Meir
la source
0
NSString *stringreplace=[yourString stringByReplacingOccurrencesOfString:@"search" withString:@"new_string"];
Shaik Tamim
la source
Veuillez utiliser le lien d' édition pour expliquer comment ce code fonctionne et ne pas simplement donner le code, car une explication est plus susceptible d'aider les futurs lecteurs. Voir aussi Comment répondre . source
Jed Fox