最近工作中遇到个情况,要从一段文字和数字的字符串中取出电话号码,按照以前的做法就是用正则表达式匹配出来,但是通过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