Sostituzione di stringhe in Objective-C


Risposte:


786

Potresti usare il metodo

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

... per ottenere una nuova stringa con una sottostringa sostituita (vedere la NSStringdocumentazione per gli altri)

Uso di esempio

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

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

2
Ho pensato che il punto di avere NSString e una sottoclasse NSMutableString fosse perché un'istanza di NSString non è modificabile . Mentre - come ogni persona sana di mente, preferirei avere le anatre che gli archi ogni giorno - il fatto che tu abbia appena sovrascritto il contenuto mi ha lasciato senza parole str.
ele

1
Ma immagino che l'indirizzo sia strcambiato nel processo
Colas

16
non cambia. str ora contiene una stringa completamente nuova. stringByReplacingOccurencesOfString NON muta la stringa. Restituisce semplicemente una nuova stringa.
Septiadi Agus

22

NSStringgli oggetti sono immutabili (non possono essere modificati), ma esiste una sottoclasse mutabile NSMutableString, che offre diversi metodi per sostituire i caratteri all'interno di una stringa. Probabilmente è la soluzione migliore.


10

Se desideri la sostituzione di più stringhe:

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

7

È anche possibile sostituire la stringa con 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

Il problema esiste nelle vecchie versioni su iOS. negli ultimi, funziona bene il da destra a sinistra. Quello che ho fatto è il seguente:

per prima cosa controllo la versione iOS:

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

Di:

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

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

Si prega di utilizzare il collegamento di modifica per spiegare come funziona questo codice e non limitarsi a fornire il codice, poiché è più probabile che una spiegazione possa aiutare i futuri lettori. Vedi anche Come rispondere . fonte
Jed Fox
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.