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


Ответы:


781

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

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

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

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

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

str = [str stringByReplacingOccurrencesOfString:@"string"
                                     withString:@"duck"];

2
Я думал, что смысл наличия NSString и подкласса NSMutableString заключается в том, что экземпляр NSString неизменен . Хотя - как любой здравомыслящий человек, я предпочел бы иметь утки, а не струны в любой день - тот факт, что вы просто переписали содержимое, strпросто взорвал мой разум.
Эле

1
Но я думаю, что адрес strизменился в процессе
Colas

16
это не меняется. str теперь содержит совершенно новую строку. stringByReplacingOccurencesOfString НЕ изменяет строку. Он просто возвращает новую строку.
Септиади Агус

22

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


10

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

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

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

Пожалуйста, используйте ссылку редактирования, чтобы объяснить, как работает этот код, а не просто давать код, так как объяснение с большей вероятностью поможет будущим читателям. Смотрите также Как ответить . источник
Джед Фокс
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.