在NSString中替换特定索引处的字符

19
我正在寻找一种方法来替换 NSString 中特定索引位置的字符。
例如:myString = @"******"; 我想要把第三个 "*" 替换成 "A",使得字符串看起来像这样:myString = @"**A***"; 我该如何实现?
提前感谢。

你可以尝试使用这个链接。它有你遇到的同样问题。http://www.iphonedevsdk.com/forum/iphone-sdk-development/76235-nsstring-how-replace-character-certain-index.html - Yama
1
可能是 http://stackoverflow.com/questions/7940104/replace-character-in-string 的重复问题。 - Emil
5个回答

32

尝试使用以下代码:

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

18

实际上有两个选项;

由于NSString是只读的,您需要在NSString上调用以获取可以实际更改的NSMutableString,然后在NSMutableString上调用替换其中的字符。如果要多次更改字符串,则此方法更有效率。

NSString还有一个方法,它返回一个将字符替换的新NSString。这对于单个更改可能更有效率,但需要为每次替换创建一个新的NSString。


4

试试这个示例方法

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

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

}

如果您的字符串是"testing",并且您希望第一个字符"t"被替换为"*",则调用方法。
[self string:yourString ByReplacingACharacterAtIndex:0 byCharacter:@"*"]

运行并前往


1
如果您不介意使用一些C语言,可以使用以下代码:
char *str = (char *)[myString UTF8String];
str[2] = 'A';
myString = [NSString stringWithUTF8String:str];

在执行此操作之前,您应该确信myString至少有3个字符。除此之外,这是一种非常快速和高效的方法来执行类似的操作。


在iOS上可以工作,但在MacOS上不行。我相信MacOS会返回新分配的字符串。 - Borzh

0

我通过一个Swift扩展做出了贡献:

extension NSString{

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

        return self.stringByReplacingCharactersInRange(NSRange(location: pIndex, length: 1), withString: String(pChar))
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接