NSMutableString:可变字符串,这里的可变指的是可以动态修改。
当我们去看NSMutableString的时候会看到下面的一行代码:
@interface NSMutableString : NSString
可以看出,NSMutableString是继承自NSString的,所以,NSString的属性和方法,在这里都是适用的。但是,既然把它单独拿出来,那么,就肯定有它独特的地方。
在上一篇文章中就有提到,我们创建的字符串对象,其实是一个指向内存中字符串的指针,既然是这样,在创建NSMutableString的时候也同样的是一个指针。而且NSMutableString还是可以动态修改的,那么我们创建的时候其实就是向内存去动态的申请空间。
创建对象:
对象方法创建可变字符串
- (NSMutableString *)initWithCapacity:(NSUInteger)capacity;
类方法创建可变字符串
+ (NSMutableString *)stringWithCapacity:(NSUInteger)capacity;
从上面的两个方法来看,创建字符串的时候就是去申请内存空间。 capacity就是要申请的空间大小。但是,在多数情况下,我们并不知道我们需要多大的空间,这个时候,我们可以给capacity的值写为0,这个时候内存的分配就会在赋值的时候根据值的内存大小来动态分配。
初始化:
NSMutableString在使用之前必须初始化。
NSMutableString的对象,在初始化赋值的时候,最好不要使用‘=’直接给对象赋值,这样会有警告。
常使用:
+ (instancetype)stringWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1,2);
+ (instancetype)stringWithString:(NSString *)string;
这两个方法对 NSMutableString对象进行初始化,可以看出这两个方法都是将一个不可变的字符串赋值给可变字符串。可变字符串的操作:
在指定的下标位置插入一个字符串
- (void)insertString:(NSString *)aString atIndex:(NSUInteger)loc;
在指定下标位置删除指定长度的字符串
- (void)deleteCharactersInRange:(NSRange)range;
在字符串后面拼接一个字符串
- (void)appendString:(NSString *)aString;
在字符串后面拼接字符串
- (void)appendFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1,2);
彻底更换字符串
- (void)setString:(NSString *)aString;
在指定位置替换字符串中的子串
- (void)replaceCharactersInRange:(NSRange)range withString:(NSString *)aString;
示例:
//创建一个可变字符串对象
NSMutableString *string = [[NSMutableString alloc]initWithCapacity:10];
//初始化
string = [NSMutableString stringWithFormat:@"这是一个字符串"];
NSLog(@"%@",string);
//在字符串中插入一个字符串
[string insertString:@"可变" atIndex:4];
NSLog(@"%@",string);
//在指定位置删除指定长度的字符串,删除‘一个’
[string deleteCharactersInRange:NSMakeRange(2, 2)];
NSLog(@"%@",string);
//在string后面添加一个字符串‘,可变的!’
[string appendString:@",可变的!"];
NSLog(@"%@",string);
//在string后面添加多个字符串
[string appendFormat:@"%@%@%@", @"111", @"222", @"3333"];
NSLog(@"%@",string);
//将string更换为‘这是一个新的字符串啦!’
[string setString:@"这个字符串被换啦!"];
NSLog(@"%@", string);
//替换指定的字符串
[string replaceCharactersInRange:NSMakeRange(0, 2) withString:@"this"];
NSLog(@"%@",string);
打印结果:
2017-03-17 17:11:41.511 OCdemo[1495:188109] 这是一个字符串
2017-03-17 17:11:41.512 OCdemo[1495:188109] 这是一个可变字符串
2017-03-17 17:11:41.512 OCdemo[1495:188109] 这是可变字符串
2017-03-17 17:11:41.512 OCdemo[1495:188109] 这是可变字符串,可变的!
2017-03-17 17:11:41.513 OCdemo[1495:188109] 这是可变字符串,可变的!1112223333
2017-03-17 17:11:41.513 OCdemo[1495:188109] 这个字符串被换啦!
2017-03-17 17:11:41.513 OCdemo[1495:188109] this字符串被换啦!
Program ended with exit code: 0
从上面的代码和打印结果来看,上面的可变字符串操作方法都很简单。
上面的操作基本上就是可变字符串的常用操作了。