Замена строки в Objective-C

Ответы:

781

Вы могли бы использовать метод

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

... чтобы получить новую строку с заменой подстроки (см. NSStringдокументацию для других)

Пример использования

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

str = [str stringByReplacingOccurrencesOfString:@"string"
                                     withString:@"duck"];
epatel
источник
2
Я думал, что смысл наличия NSString и подкласса NSMutableString заключается в том, что экземпляр NSString неизменен . Хотя - как любой здравомыслящий человек, я предпочел бы иметь утки, а не струны в любой день - тот факт, что вы просто переписали содержимое, strпросто взорвал мой разум.
Эле
1
Но я думаю, что адрес strизменился в процессе
Colas
16
это не меняется. str теперь содержит совершенно новую строку. stringByReplacingOccurencesOfString НЕ изменяет строку. Он просто возвращает новую строку.
Септиади Агус
22

NSStringобъекты являются неизменяемыми (их нельзя изменить), но есть изменяемый подкласс NSMutableString, который дает вам несколько методов для замены символов в строке. Это, вероятно, ваш лучший выбор.

mipadi
источник
10

Если вы хотите заменить несколько строк:

NSString *s = @"foo/bar:baz.foo";
NSCharacterSet *doNotWant = [NSCharacterSet characterSetWithCharactersInString:@"/:."];
s = [[s componentsSeparatedByCharactersInSet: doNotWant] componentsJoinedByString: @""];
NSLog(@"%@", s); // => foobarbazfoo
tania_S
источник
7

Также возможна замена строки на 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

Проблема существует в старых версиях на iOS. в последнем справа налево работает хорошо. То, что я сделал, заключается в следующем:

Сначала я проверяю версию iOS:

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

чем:

// 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"];
Шаик Тамим
источник
Пожалуйста, используйте ссылку редактирования, чтобы объяснить, как работает этот код, а не просто давать код, так как объяснение с большей вероятностью поможет будущим читателям. Смотрите также Как ответить . источник
Джед Фокс