我对Objective C相对较新,我试图找出如何在我知道该字符所在的索引的情况下有效地替换字符串中的字符。
基本上如果S是我的字符串,我希望能够为某些我做这个[i] ='n'
但这对我来说看起来很贵:
NSRange range = NSMakeRange(0,1);
NSString *newString = [S stringByReplacingCharactersInRange:range withString:@"n"];
不是吗?
答案 0 :(得分:2)
是的,为了替换一个单个字符,复制整个字符串确实是一种矫枉过正。它不会影响性能,除非这是你的应用程序的瓶颈,每秒钟被称为百万次,但使用NSMutableString
和replaceCharactersInRange:NSMakeRange(0, 1) withString:@"n"
仍然感觉更好,或者只是回归使用C字符串,如果速度必要。
答案 1 :(得分:1)
H2CO3是对的。使用可变数组。您还可以创建一个类别以支持对字符串的索引访问:
<强>的NSMutableString + Index.h 强>
@interface NSMutableString (Index)
- (void)setObject:(id)anObject atIndexedSubscript:(NSUInteger)idx;
@end
<强>的NSMutableString + Index.h 强>
@implementation NSMutableString (Index)
- (void)setObject:(id)anObject atIndexedSubscript:(NSUInteger)idx {
[self replaceCharactersInRange:NSMakeRange(idx, 1) withString:anObject];
}
@end
其他地方:
NSMutableString *str = [[NSMutableString alloc] initWithString:@"abcdef"];
str[2] = @"X";
NSLog(str);
输出:
abXdef
注意:不要忘记导入您使用索引语法的类别。