#pragma mark -04-NSString的常用方(2)
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对象.
|