2012-01-21 2 views
16

Я ищу способ заменить символ по определенному индексу NSString.Заменить символ по определенному индексу в NSString

Например: myString = @"******";

Я хочу заменить 3-й «*» с «А», так что строка выглядит следующим образом: myString = @"**A***";

Как я могу добиться этого?

Заранее благодарен

+1

Возможный дубликат http://stackoverflow.com/questions/7940104/replace-character-in-string – Emil

+0

Вы можете попробовать эту ссылку. У него та же проблема, что и у вас. http://www.iphonedevsdk.com/forum/iphone-sdk-development/76235-nsstring-how-replace-character-certain-index.html – Sarah

ответ

25

Попробуйте с этим:

NSString *str = @"*******"; 
str = [str stringByReplacingCharactersInRange:NSMakeRange(3, 1) withString:@"A"]; 
NSLog(@"%@",str); 
18

Есть действительно два варианта;

С NSString только для чтения, вам нужно позвонить mutableCopy на NSString, чтобы получить NSMutableString, что на самом деле может быть изменен, а затем вызвать replaceCharactersInRange:withString: на NSMutableString заменить символы в нем. Это более эффективно, если вы хотите изменить строку более одного раза.

Существует также метод stringByReplacingCharactersInRange:withString: на NSString, который возвращает новую NSString с замененными символами. Это может быть более эффективным для одного изменения, но вам необходимо создать новую NSString для каждой замены.

+0

Спасибо, что сделал эту работу! Я решил свою проблему! – niclas

1

Если вы не возражаете против использования немного C, использовать что-то вроде этого:

char *str = (char *)[myString UTF8String]; 
str[2] = 'A'; 
myString = [NSString stringWithUTF8String:str]; 

Конечно, вы должны быть абсолютно уверены в том, что туЗЬптд имеет, по крайней мере, Перед тем, как сделать это. Кроме этого, это очень быстрый и эффективный способ сделать что-то подобное.

+0

Работает в iOS, но не на MacOS. Я считаю, что MacOS возвращает новую выделенную строку. – Borzh

4

Попробуйте этот метод проб

-(NSString *)string:(NSString*)string ByReplacingACharacterAtIndex:(int)i byCharacter:(NSString*)StringContainingAChar{ 

    return [string stringByReplacingCharactersInRange:NSMakeRange(i, 1) withString:StringContainingAChar]; 

} 

если ваша строка «тестирование», и вы хотите, первый символ «т» следует заменить на «*», чем метод вызова

[self string:yourString ByReplacingACharacterAtIndex:0 byCharacter:@"?"] 

Run и Go

0

Мой вклад с быстрым расширением из ответа:

extension NSString{ 

    func replacingACharacterAtIndex(pIndex : Int, pChar : Character) -> NSString{ 

     return self.stringByReplacingCharactersInRange(NSRange(location: pIndex, length: 1), withString: String(pChar)) 
    } 
} 
Смежные вопросы