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"];

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.


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

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

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"];

0
NSString *stringreplace=[yourString stringByReplacingOccurrencesOfString:@"search" withString:@"new_string"];

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
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.