1. 字符串的比较.
- (NSComparisonResult)compare:(NSString *)string;
2. 指定选项的比较.
1). 忽略大小写的比较.
NSString *str1 = @"jack";
NSString *str2 = @"JACK";
int len = [str1 compare:str2 options:NSCaseInsensitiveSearch];
2). 完全匹配的比较.
NSString *str1 = @"jack";
NSString *str2 = @"JACK";
int len = [str1 compare:str2 options: NSLiteralSearch];
3). 比较字符串中的数字的大小.
NSString *str1 = @"img100021.jpg";
NSString *str2 = @"img100012.jpg";
int len = [str1 compare:str2 options: NSNumericSearch];
比较的是字符串中数组的大小.
使用前提: 两个字符串的格式要相同.一般情况下用来比较两个路径
3. 判断字符串是否以指定的字符串开始的.
- (BOOL)hasPrefix:(NSString *)str;
4. 判断字符串是否以指定的字符串结束的.
- (BOOL)hasSuffix:(NSString *)str;
5. 在字符串中搜索子字符串的范围.
@"i love rose";
@"love"
范围: 起始下标是:2 长度: 4
- (NSRange)rangeOfString:(NSString *)searchString
返回值代表子字符串在主串中的范围.
返回值是个NSRange 这是1个结构体.
typedef struct _NSRange {
NSUInteger location;
NSUInteger length;
} NSRange;
location: 代表这段范围的起始下标.
length: 代表匹配的长度.
如果在主串中没有找到子串. 返回的NSRange结构体变两的length的值就是0.location的值就是NSUInteger的最大值.
所以,如果我们要判断是否在主串中找了子串.
1). 判断返回的NSRange结构体的length是否为0
2). 也可以判断location的值是否为最大值.NSNotFound就代表它的最大值.
如果找到的情况下:
location的值 是第一次匹配到的下标.
length的值就是子串的长度.
@"jack"
6. NSRange
1). 这是我们Foundation框架中定义的一个结构体.
2). 这个结构体变量用来表示1个范围.
一般情况下,用来表示子串在主串中的范围.
location: 起始下标
length: 匹配到的长度.
@"我爱黑马程序员!"
@"黑马"
location:2
length: 2
3). NSRange结构体变量的初始化.
a. 最简单的初始化.先声明结构体变量.再初始化属性.
NSRange range;
range.location = 2;
range.length = 3;
b. NSRange range = {2,3};
c. NSRange range = {.location = 2, .length = 3};
d. Foundation框架提供了1个函数来快速的创建1个NSRange结构体变量.
NSRange range = NSMakeRange(2, 3);
e. 将NSRange结构体变量转换为字符串的.
NSRange range = NSMakeRange(2, 3);
NSString *str = NSStringFromRange(range);
NSLog(@"str = %@",str);
7. 字符串的截取
@"我爱黑马程序员!"
从指定的下标开始一直截取到最后
- (NSString *)substringFromIndex:(NSUInteger)from;
截取前面指定个数的字符串.
- (NSString *)substringToIndex:(NSUInteger)to;
截取指定的范围的字符串.
- (NSString *)substringWithRange:(NSRange)range;
8. 字符串的替换.
@"我很爱很爱你"; 将字符串中的 爱 换成 恨
- (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement
注意的是: 各种操作字符串的方法.原来字符串本身不会变.因为字符串的恒定性.
最终的操作结果都是以返回值返回来的.
还可以实现删除的效果: 将指定的字符串换成@""
9. 字符串的类型转换.
将字符串数据转换为别的类型.
@property (readonly) double doubleValue;
@property (readonly) float floatValue;
@property (readonly) int intValue;
@property (readonly) NSInteger integerValue;
@property (readonly) long long longLongValue;
@property (readonly) BOOL boolValue;
如果字符串中的数据不完全是这个要转换的类型.
从头开始,能转换多少就是多少.
10. 删除字符串前后的空格.
NSString *str = @" chiwcniwnciwe c winciwn ciewnciewc fcneivbcnei ";
str = [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
只能删除前后的空格,中间的空格如果要删除就是以替换.
我对你的要求:
1). 不需要把所有的方法都记住. 但是几个重要的方法是要记住的.
其他的方法呢? 要做到有印象.
#pragma mark -05-NSMutableString的使用
1. 当我们使用NSString去大批量的拼接字符串的时候.
每拼接1次,就会创建1个新的字符串对象.
大批量拼接的时候,效率就会很低下.
一定要理解为什么效率这么低下.
因为每拼接1次,都要重新的创建1个对象.而创建对象本身就是很耗性能的.
何况你创建那么多.
2. 在实际的项目中,我们肯定会遇到这样的场景.
大批量的字符串拼接.如果还像上面那样拼接肯定是不行的.
希望: faster 快一些.
上面之所以慢: 是因为NSString对象不可变.每次追加原来的字符串对象不会改变,而是新创建1个字符串对象.
我们妄想: 如果字符串对象可以改变.存储在对象中的字符串可以改变,那么这样的话.
每次拼接就不需要创建新的对象,直接修改原来的对象,这样效率就会高很多.
3. NSMutableString
1). 是Foundation框架中的1个类. 从NSString继承.
所以,NSMuatbleString也是用来存储字符串数据的. 因为他的爹爹是NSString
所以,NSString的功能NSMuatbleStrin通通都有
2). NSMutableString相对于NSString做的扩展.
存储在NSMutableString对象中的字符串数据具备可变性.存储在其中的字符串数据可以改.
存储在NSString对象中的字符串数据是不可以更改的.
4. NSMutableString的创建.
1) 这是1个类,要使用它的话.当然是需要创建对象.
NSMutableString *str1 = [NSMutableString new];
NSMutableString *str2 = [[NSMutableString alloc] init];
NSMutableString *str3 = [NSMutableString string];
2). 注意:
NSMutableString *str1 = @"jack";
这样的写法是错误的.
@"jack"是1个NSString对象.str1是1个子类指针.
如果通过这个指针调用子类独有的方法的时候,就会运行报错.
3). 如何往NSMutableString对象中存储字符串数据.
将字符串追加存储到NSMutableString对象中
- (void)appendString:(NSString *)aString;
以拼接的方式追加.
- (void)appendFormat:(NSString *)format, ...
4). 特别强调.
往NSMutableString对象中追加数据,直接就是改的这个对象的内容.
不会创建1个新的对象.
5. 使用NSMutableString做大批量的字符串拼接.
这个时候效率就很高了.
为什么? 因为NSMutableString对象至始至终都只有1个.
每次拼接的时候,都是直接修改的这个对象,没有新创建对象. 所以效率很好
6. 什么时候使用NSMutableString?
NSString: 效率高. 不拼接的时候. 同1个字符串对象,如果后面要用. 就不会再创建了.
大批量拼接效率低
NSMutableString: 只要alloc new都是1个新的对象.
优点:大批量拼接的时候效率高.
我们平时还是使用NSString.
当我们要做大批量的字符串拼接的时候,才使用NSMutableString
超过7次的拼接.
7. 在使用NSString的地方也可以使用NSMutableString
因为NSMutableString:NSString
8. 将可变字符串对象转换为不可变的字符串对象.
调用可变字符串对象的copy方法 就返回1个NSString对象.
| 欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |