NSScanner像一个扫描仪一样,从字符串的第一个位置开始扫描, 如果扫描到特定的字符串就可以被存储或者使用.
NSScanner可以扫描很多基本数据类型:
- (BOOL)scanInt:(int *)result;
- (BOOL)scanInteger:(NSInteger *)result NS_AVAILABLE(10_5, 2_0);
- (BOOL)scanLongLong:(long long *)result;
- (BOOL)scanUnsignedLongLong:(unsigned long long *)result NS_AVAILABLE(10_9, 7_0);
- (BOOL)scanFloat:(float *)result;
- (BOOL)scanDouble:(double *)result;
- (BOOL)scanHexInt:(unsigned *)result;
- (BOOL)scanHexLongLong:(unsigned long long *)result NS_AVAILABLE(10_5, 2_0);
- (BOOL)scanHexFloat:(float *)result NS_AVAILABLE(10_5, 2_0);
- (BOOL)scanHexDouble:(double *)result NS_AVAILABLE(10_5, 2_0);
NSScanner可以给扫描定义限制条件:
- (BOOL)scanString:(NSString *)string intoString:(NSString **)result; //把扫描的结构存入result中
- (BOOL)scanCharactersFromSet:(NSCharacterSet *)set intoString:(NSString **)result; //依据set中的字符扫描
- (BOOL)scanUpToString:(NSString *)string intoString:(NSString **)result; //扫描到某个字符串的位置
- (BOOL)scanUpToCharactersFromSet:(NSCharacterSet *)set intoString:(NSString **)result; //从某个位置开始扫描
初始化:以String为基础
- (id)initWithString:(NSString *)string;
+ (id)scannerWithString:(NSString *)string;
例子:把一个8位的颜色字符串变成颜色 //ffffff00:白色
NSString *timeStr = @"ffffff00";
unsigned int r, g, b, al;
[[NSScanner scannerWithString:[timeStr substringWithRange:NSMakeRange(0, 2)]] scanHexInt:&r];
[[NSScanner scannerWithString:[timeStr substringWithRange:NSMakeRange(2, 2)]] scanHexInt:&g];
[[NSScanner scannerWithString:[timeStr substringWithRange:NSMakeRange(4, 2)]] scanHexInt:&b];
[[NSScanner scannerWithString:[timeStr substringWithRange:NSMakeRange(6, 2)]] scanHexInt:&al];
UIColor *strColor = [UIColor colorWithRed:r/255.0 green:g/255.f blue:b/255.f alpha:(float)al/10];
NSScanner和NSCharacterSet的组合
NSString *str = @"abc123efg";
NSString *resultStr;
[[NSScanner scannerWithString:str] scanCharactersFromSet:[NSCharacterSet lowercaseLetterCharacterSet] intoString:&resultStr]; //abc,就停止了
[[NSScanner scannerWithString:str] scanUpToCharactersFromSet:[NSCharacterSet decimalDigitCharacterSet] intoString:&resultStr];//abc,就停止了