2009-03-20 4 views

ответ

748

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

- (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», просто взорвали мой разум. – ele

+1

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

+11

, он не меняется. str теперь содержит целую новую строку. stringByReplacingOccurencesOfString НЕ мутирует строку. Он просто возвращает новую строку. –

22

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

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

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

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

Также возможна замена строки с помощью 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
NSString *stringreplace=[yourString stringByReplacingOccurrencesOfString:@"search" withString:@"new_string"]; 
+0

Пожалуйста, используйте ссылку [edit], чтобы объяснить, как работает этот код, и не просто дать код, так как объяснение, скорее всего, поможет будущим читателям. См. Также [ответ]. [Источник] (http://stackoverflow.com/users/5244995) –

 Смежные вопросы

  • Нет связанных вопросов^_^