NSScanner扫描字符串用到scanString和scanUpToString两个方法。
- scanString:
- (BOOL)scanString:(NSString *)string intoString:(NSString * _Nullable * _Nullable)result;
判断当前扫描指针所指的字符串是否是以目标字符string开头, 若是则将指针停留在目标string之后,将目标字符串string存入result中,返回YES,否则NO。
- scanUpToString
- (BOOL)scanUpToString:(NSString *)string intoString:(NSString * _Nullable * _Nullable)result;
扫描指针从开头一直扫描到有首次出现目标字符string为止,指针停留在目标string之前,将目标字符前面的全部内容存入result中
- 示例:
NSString *text = nil;
NSString *content = @"aaa[bbbb]ccc";
NSScanner *theScanner = [NSScanner scannerWithString:content];
while (!theScanner.isAtEnd) { // 判断是否扫描完毕
[theScanner scanString:@"[" intoString:&text];
NSLog(@"%@", text); // 返回nil
[theScanner scanUpToString:@"[" intoString:&text];
NSLog(@"%@", text); // 返回aaa[
BOOL result = [theScanner scanString:@"[" intoString:&text];
NSLog(@"%@", text); // 返回[
if (!result) {
//没有找到[
break;
}
[theScanner scanUpToString:@"]" intoString:&text];
NSLog(@"%@", text); // 返回bbbb
}
- NSScanner属性详解
// 要扫描的字符串
@property (readonly, copy) NSString *string;
// 下次扫描开始的位置,如果该值超出了string的区域,将会引起NSRangeException
@property NSUInteger scanLocation;
// 在扫描时被跳过的字符集,默认是空白格和回车键。
// 被跳过的字符集优先于扫描的字符集:例如一个scanner被跳过的字符集为空格,通过scanInt:去查找字符串中的整型数时,首先做的不是扫描,而是跳过空格,直到找到十进制数据或者其他的字符。在字符被扫描的时候,跳过功能就失效了。如果你扫描的字符和跳过的字符是一样的,结果将是未知的。被跳过的字符是一个唯一值,scanner不会将忽略大小写的功能应用于它,也不会用这些字符做一些组合
@property (nullable, copy) NSCharacterSet *charactersToBeSkipped;
// 是否区分字符串中大小写的标志。默认为NO,注意:该设置不会应用到被跳过的字符集
@property BOOL caseSensitive;