Zastępowanie ciągów w celu C

Odpowiedzi:

781

Możesz użyć tej metody

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

... aby uzyskać nowy ciąg z zastąpionym podciągiem (zobacz NSStringdokumentację dla innych)

Przykładowe użycie

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

str = [str stringByReplacingOccurrencesOfString:@"string"
                                     withString:@"duck"];
epatel
źródło
2
Myślałem, że celem posiadania NSString i podklasy NSMutableString było to, że instancja NSString jest niezmienna . Podczas gdy - jak każda rozsądna osoba, wolałbym mieć kaczki niż sznurki każdego dnia - fakt, że po prostu nadpisałeś zawartość, po prostu oszalał na strmyśl.
ele
1
Ale chyba strzmienił się adres
Colas
16
to się nie zmienia. str zawiera teraz zupełnie nowy ciąg. stringByReplacingOccurencesOfString NIE mutuje łańcucha. Po prostu zwraca nowy ciąg.
Septiadi Agus
22

NSStringobiekty są niezmienne (nie można ich zmienić), ale istnieje zmienna podklasa NSMutableString, która daje kilka metod zastępowania znaków w ciągu. To prawdopodobnie twój najlepszy zakład.

mipadi
źródło
10

Jeśli chcesz zastąpić wiele ciągów:

NSString *s = @"foo/bar:baz.foo";
NSCharacterSet *doNotWant = [NSCharacterSet characterSetWithCharactersInString:@"/:."];
s = [[s componentsSeparatedByCharactersInSet: doNotWant] componentsJoinedByString: @""];
NSLog(@"%@", s); // => foobarbazfoo
tania_S
źródło
7

Możliwe jest również zastąpienie łańcucha ciągiem 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
źródło
0

Problem występuje w starych wersjach na iOS. ostatnio działa od prawej do lewej. To, co zrobiłem, jest następujące:

najpierw sprawdzam wersję iOS:

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

Niż:

// set RTL on the start on each line (except the first)  
myUITextView.text = [myUITextView.text stringByReplacingOccurrencesOfString:@"\n"
                                                           withString:@"\u202B\n"];
Meir
źródło
0
NSString *stringreplace=[yourString stringByReplacingOccurrencesOfString:@"search" withString:@"new_string"];
Shaik Tamim
źródło
Proszę użyć linku edycyjnego, aby wyjaśnić, jak działa ten kod, a nie tylko podać kod, ponieważ wyjaśnienie może pomóc przyszłym czytelnikom. Zobacz także Jak odpowiedzieć . źródło
Jed Fox