NSScanner iOS自带扫描器

         最近工作中遇到个情况,要从一段文字和数字的字符串中取出电话号码,按照以前的做法就是用正则表达式匹配出来,但是通过NSScanner 能够针对这一情况快速的扫描出电话号码(任意数字都行).

// iOS自带的扫描器(我认为来截取电话号码等数字时候特别方便,不需要用正则表达式)
    NSString *bananas = @"he 15279107716_hehehaha ";
    NSScanner *scanner = [NSScanner scannerWithString:bananas];
    NSLog(@" string = %@",[scanner string]);
    NSLog(@" startLocation = %ld",(long)[scanner scanLocation]);
    // [NSCharacterSet decimalDigitCharacterSet] 代表了十进制数字
    // scanUpToCharactersFromSet:intoString:方法(如果你不想保留这些字符,可以传递一个nil给第2个参数)
    [scanner scanUpToCharactersFromSet:[NSCharacterSet decimalDigitCharacterSet] intoString:nil];
    NSLog(@" firstLocation = %ld",[scanner scanLocation]); // 打印出来为 3
    NSInteger anInteger;
    [scanner scanInteger:&anInteger];
    NSLog(@" figure = %ld",(long)anInteger);   // 打印出来为15279107716
    NSLog(@" secLocation = %ld",[scanner scanLocation]); // 打印出来为14
    // 如果想要获取你得到想要的数值之后所有的值,通过下面方法
    NSString *string;
    string = [[scanner string] substringFromIndex:([scanner scanLocation])];
    NSLog(@" string = %@",string); // 打印出来为 _hehehaha
    
    // setCaseSensitive:方法设置是否忽略大小写,默认是忽略。
    // 为什么要重新创建NSScanner呢?
    // 因为在扫描到指定字符串之后,scanner的位置指向了该字符串开始处
    NSScanner *scanner1 = [NSScanner scannerWithString:bananas];
    NSString *separatorString = @"_he";
    NSString *container;
    // 以separatorString为扫面分割点,并将前面扫描的结果存进container中
    [scanner1 scanUpToString:separatorString intoString:&container];
    NSLog(@" container = %@",container);       // 打印的是 container = he 15279107716


你可能感兴趣的:(ios,截取,NSScanner)