2009-03-20 11 views

Répondre

748

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é (Voir NSString documentation pour les autres)

Exemple d'utilisation

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

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

Je pensais que le point d'avoir NSString et une sous-classe NSMutableString était parce qu'une instance de NSString est * * inchangeable. Bien que - comme toute personne sensée, je préférerais avoir des canards que des ficelles tous les jours - le fait que vous venez d'écraser le contenu de «str» m'a fait perdre la tête. – ele

+1

Mais je suppose que l'adresse de 'str' a changé dans le processus – Colas

+11

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

22

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

0

Le problème existe dans les anciennes versions sur iOS. dans le dernier, le droit-à-gauche fonctionne bien. Ce que je l'ai fait, est comme suit:

d'abord je vérifier 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"]; 
7

Si vous voulez plusieurs remplacement de chaîne:

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

Il est également possible de remplacer la chaîne par 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
NSString *stringreplace=[yourString stringByReplacingOccurrencesOfString:@"search" withString:@"new_string"]; 
+0

Veuillez utiliser le lien [edit] pour expliquer comment ce code fonctionne et ne donnez pas simplement le code, car une explication est plus susceptible d'aider les futurs lecteurs. Voir aussi [réponse]. [source] (http://stackoverflow.com/users/5244995) –

Questions connexes