String-Ersetzung in Objective-C


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

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.


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

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

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

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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.