Objective-C 6 NSMutableString的常用方法

时间:2021-03-04 21:32:35

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异常



4 在已有字符串的指定位置插入字符串

- (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.

6 字符串拷贝

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 没有玩了!