NSMutableString是Cocoa提供的一个可变字符串类,它是NSString的子类。如果想改变字符串,请使用这个子类。
因为NSMutalbeString说NSString的子类,所以它也可以使用父类的方法。
看一下它的基本用法:
1 给字符串分配容量
- (NSMutableString *)initWithCapacity:(NSUInteger)capacity;
+ (NSMutableString *)stringWithCapacity:(NSUInteger)capacity;
这两个方法都可以。
NSMutableString *str = [[NSMutableString alloc] initWithCapacity:40];
NSMutableString *str = [NSMutableString stringWithCapacity:40];
这个容量只是一个建议,可以超过大小,可以等于,更可以小于。字符串的大小并不仅限于所提供的容量,这只是个最优值。
2 在已有字符串后面添加字符
- (void)appendString:(NSString *)aString;
- (void)appendFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1,2);
appendString: 直接将字符串参数复制到接收对象的末尾。
appendFormat: 类似于stringWithFormat:,但并没有创建新字符串,而是将格式化的字符串附加在末尾。
NSMutableString *str = [NSMutableString stringWithCapacity:30]; [str appendString:@"Hello LoL"]; NSLog(@"str = %@",str); [str appendFormat:@" aobama is %i",6300]; NSLog(@"str = %@",str);输出结果为:
2016-01-09 11:17:15.737 命令行工程[12921:1050253] str = Hello LoL 2016-01-09 11:17:15.737 命令行工程[12921:1050253] str = Hello LoL aobama is 6300
3 在已有字符串按给的范围和长度删除字符串
- (void)deleteCharactersInRange:(NSRange)range;
NSMutableString *str = [[NSMutableString alloc] initWithString:@"lol vn haojiu 没有玩了"]; NSLog(@"str = %@",str); [str deleteCharactersInRange:NSMakeRange(4, 3)]; NSLog(@"str = %@",str);
输出结果:
2016-01-09 11:20:28.083 命令行工程[12991:1051427] str = lol vn haojiu 没有玩了! 2016-01-09 11:20:28.084 命令行工程[12991:1051427] str = lol haojiu 没有玩了!
如果范围超过字符串范围,会报NSRangeException异常。
- (void)insertString:(NSString *)aString atIndex:(NSUInteger)loc;
NSMutableString *str = [[NSMutableString alloc] initWithString:@"lol vn haojiu 没有玩了!"]; NSLog(@"str = %@",str); [str insertString:@"jinkesi" atIndex:4]; NSLog(@"str = %@",str); [str insertString:@"jinkesi" atIndex:str.length]; NSLog(@"str = %@",str); //[str insertString:@"jinkesi" atIndex:str.length+1]; 这个会报错。 //NSLog(@"str = %@",str);
2016-01-09 11:30:23.828 命令行工程[13058:1055700] str = lol vn haojiu 没有玩了! 2016-01-09 11:30:23.829 命令行工程[13058:1055700] str = lol jinkesivn haojiu 没有玩了! 2016-01-09 11:30:23.829 命令行工程[13058:1055700] str = lol jinkesivn haojiu 没有玩了!jinkesi程序中的 [str insertString : @"jinkesi" atIndex :str. length ];
等价于[str appendString:@"jinkesi"];
但是如果下标超过了字符串的长度:
[str insertString:@"jinkesi" atIndex:str.length+1];
会有异常发生:Terminating app due to uncaught exception 'NSRangeException', reason: '-[__NSCFString insertString:atIndex:]: Range or index out of bounds'
5 设置字符串内容
- (void)setString:(NSString *)aString;
设置字符串的内容,会将原先的内容覆盖掉。
NSMutableString *str = [NSMutableString stringWithString:@"lol vn haojiu 没有玩了!"]; NSLog(@"str = %@",str); [str setString:@"hello lol."]; NSLog(@"str = %@",str);输出结果:
2016-01-09 11:56:41.908 命令行工程[13250:1066642] str = lol vn haojiu 没有玩了! 2016-01-09 11:56:41.909 命令行工程[13250:1066642] str = hello lol.
NSMutableString *str1 = [NSMutableString stringWithString:@"lol vn haojiu 没有玩了!"]; NSLog(@"str1 = %@",str1); NSMutableString *str2; //字符串赋值 str2 = str1; NSLog (@"str2 = %@", str2); [str2 appendString: @" wuqi"]; NSLog (@"str1 = %@", str1); NSLog (@"str2 = %@", str2);
输出结果:
2016-01-09 12:03:51.651 命令行工程[13287:1069206] str1 = lol vn haojiu 没有玩了! 2016-01-09 12:03:51.652 命令行工程[13287:1069206] str2 = lol vn haojiu 没有玩了! 2016-01-09 12:03:51.652 命令行工程[13287:1069206] str1 = lol vn haojiu 没有玩了! wuqi 2016-01-09 12:03:51.652 命令行工程[13287:1069206] str2 = lol vn haojiu 没有玩了! wuqi我们发现当str1赋值给str2,str2改变,str1也改变了,这是为什么呢?
因为我们操作的是指针,str2 = str1 意思是把两个指针同时指向一块内存,
那么str2指向的内存内容改变以后str1当然跟着改变了。
7 字符串将指定范围替换
-(void)replaceCharactersInRange:range withString:aSting
NSMutableString *str1 = [NSMutableString stringWithString:@"lol vn haojiu 没有玩了!"]; [str1 replaceCharactersInRange:NSMakeRange(4, 2) withString:@"jianji"]; NSLog (@"str1 = %@", str1);输出结果:
2016-01-09 12:17:44.365 命令行工程[13399:1074439] str1 = lol jianji haojiu 没有玩了!
8 字符串子串替换
- (NSUInteger)replaceOccurrencesOfString:(NSString *)target withString:(NSString *)replacement options:(NSStringCompareOptions)options range:(NSRange)searchRange;
第一参数:替换的源字符串
第二个参数:替换掉目标字符串
第三个参赛:作用不太懂。???
第四个参赛:替换掉范围。
NSMutableString *str1 = [NSMutableString stringWithString:@"lol vn haojiu 没有玩了!"]; [str1 replaceOccurrencesOfString:@"ji" withString:@"abc" options:NSLiteralSearch range:NSMakeRange(0, [str1 length])]; NSLog (@"str1 = %@", str1);输出:
2016-01-09 12:23:24.649 命令行工程[13451:1076904] str1 = lol vn haoabcu 没有玩了!