zl程序教程

您现在的位置是:首页 >  其它

当前栏目

NSScanner扫描字符串

字符串 扫描
2023-09-11 14:14:25 时间

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;