String-Ersetzung in Objective-C

275

Wie man ein Zeichen ersetzt, ist eine Zeichenfolge in Objective-C?

4thSpace
quelle

Antworten:

781

Sie könnten die Methode verwenden

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

... um einen neuen String mit einem ersetzten Teilstring zu erhalten (siehe NSStringDokumentation für andere)

Beispiel Verwendung

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

str = [str stringByReplacingOccurrencesOfString:@"string"
                                     withString:@"duck"];
Epatel
quelle
2
Ich dachte, der Sinn von NSString und einer NSMutableString-Unterklasse lag darin, dass eine Instanz von NSString unveränderlich ist . Während - wie bei jedem vernünftigen Menschen - ich jeden Tag lieber Enten als Schnüre hätte - hat mich die Tatsache, dass Sie nur den Inhalt von strüberschrieben haben, umgehauen.
ele
1
Aber ich denke, die Adresse hat sich dabei strgeändert
Colas
16
es ändert sich nicht. str enthält jetzt einen ganz neuen String. stringByReplacingOccurencesOfString mutiert den String NICHT. Es wird einfach eine neue Zeichenfolge zurückgegeben.
Septiadi Agus
22

NSStringObjekte sind unveränderlich (sie können nicht geändert werden), aber es gibt eine veränderbare Unterklasse, NSMutableStringdie Ihnen verschiedene Methoden zum Ersetzen von Zeichen innerhalb einer Zeichenfolge bietet. Es ist wahrscheinlich die beste Wahl.

Mipadi
quelle
10

Wenn Sie mehrere Zeichenfolgen ersetzen möchten:

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

Es ist auch möglich, Zeichenfolgen durch stringByReplacingCharactersInRange zu ersetzen: 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
quelle
0

Das Problem besteht in alten Versionen unter iOS. Spätestens von rechts nach links funktioniert das gut. Was ich getan habe, ist wie folgt:

Zuerst überprüfe ich die iOS-Version:

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

Als:

// set RTL on the start on each line (except the first)  
myUITextView.text = [myUITextView.text stringByReplacingOccurrencesOfString:@"\n"
                                                           withString:@"\u202B\n"];
Meir
quelle
0
NSString *stringreplace=[yourString stringByReplacingOccurrencesOfString:@"search" withString:@"new_string"];
Shaik Tamim
quelle
Bitte verwenden Sie den Bearbeitungslink, um zu erklären, wie dieser Code funktioniert, und geben Sie nicht nur den Code an, da eine Erklärung zukünftigen Lesern eher hilft. Siehe auch Antworten . Quelle
Jed Fox