我正在尝试追加并以编程方式动态修改NSString。我想知道几件事:
例如,如果我定义了以下内容:NSString *word = [[NSString alloc] initWithString:@"Hello"];
我如何能够用“a”替换字母“e”,以及如何在字符串本身中添加另一个字符?
答案 0 :(得分:7)
Nerver使用NSString
进行字符串操作,使用NSMutableString
。
NSMutableString是NSString的子类,用于此目的。
来自Apple文档:
NSString
类声明管理不可变字符串的对象的编程接口。 (不可变字符串是在创建时定义的文本字符串,随后无法更改。NSString
用于表示Unicode字符数组(换句话说,文本字符串) )。
NSString的可变子类是NSMutableString
。
NSMutableString *word = [[NSMutableString alloc] initWithString:@"Hello"];
//Replace a character
NSString* word2 = [word stringByReplacingOccurrencesOfString:@"e" withString:@"a"];
[word release];
word = nil ;
word = [[NSMutableString alloc] initWithString:word2 ];
//Append a Character
[word appendString:@"a"];
有更多字符串操作功能请参阅Apple文档了解NSMutableString
<强>编辑:强>
您可以先使用rangeOfString
来获取字符串的范围(在您的情况下为@“e”)。
- (NSRange)rangeOfString:(NSString *)aString options:(NSStringCompareOptions)mask
然后检查NSRange对象是否有效,然后使用replaceCharactersInRange
上的NSMutableString
函数将字符集替换为字符串。
- (void)replaceCharactersInRange:(NSRange)aRange withString:(NSString *)aString
答案 1 :(得分:5)
NSString实例是不可变的。您可以通过在另一个中附加或替换字符来创建新的NSString实例,如下所示:
NSString *foo = @"Foo";
NSString *bar = @"Bar";
NSString *foobar = [foo stringByAppendingString:bar];
NSString *baz = [bar stringByReplacingOccurrencesOfString:@"r" withString:@"z"];
如果确实需要直接修改实例,可以使用NSMutableString而不是NSString。
如果你真的想使用原始字符,NSString有几个可以使用字符数组的初始化器(例如initWithCharacters:length:
)。
答案 2 :(得分:2)
首先要做的事情:
如果要修改字符串,则必须使用NSMutableString
。 NSStrings无法修改,因此他们有一个可修改的伴侣。
然后,NSMutableString有两种方法可供您找到帮助:
replaceCharactersInRange:withString deleteCharactersInRange:
(很抱歉没有直接链接到这些方法的链接。如果总是对我作为新用户施加限制,则StackOverflow ...)。
答案 3 :(得分:2)
只需添加,NSMutableString
有一个名为appendFormat
的方法,在附加内容时会有很大的帮助:
[str appendFormat:@"%@-%@-%@", @"1", @"2",@"3"]
会将“1-2-3”追加到str