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

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.


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

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

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

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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.