NSScanner : NSObject
函数、方法、属性
/** 获取被扫描的字符串 */
@property (readonly, copy) NSString *string;
/** 扫描的位置 */
@property NSUInteger scanLocation;
/** 需要忽略的字符 */
@property (nullable, copy) NSCharacterSet *charactersToBeSkipped;
/** 是否区分大小写 */
@property BOOL caseSensitive;
/** ?? */
@property (nullable, retain) id locale;
/**
初始化Scanner对象
@param string 要进行扫描的词
@return Scanner
*/
- (instancetype)initWithString:(NSString *)string NS_DESIGNATED_INITIALIZER;
使用
NSString * result = nil;
NSScanner * scanner = [[NSScanner alloc] initWithString:@"123abc~!@챠처쳐초쵸"];
int value;
scanner.charactersToBeSkipped = [NSCharacterSet characterSetWithCharactersInString:@"a"];
scanner.scanLocation = 0;
while (![scanner isAtEnd]) {
// 扫描到的字符是整型
if ([scanner scanInt:&value]) {
NSLog(@"%d, %lu",value,(unsigned long)scanner.scanLocation);
continue;
}
// 扫描到ab字符
else if ([scanner scanString:@"ab" intoString:&result]) {
NSLog(@"%@, %lu", result, (unsigned long)scanner.scanLocation);
continue;
}
// 其他情况让扫描的位置向前一一位
else {
scanner.scanLocation++;
}
}
NSScanner (NSExtendedScanner)
/**
扫描Int
@param result 使用Int接收扫描到的字符串
@return 是否扫描到
*/
- (BOOL)scanInt:(nullable int *)result;
/**
扫描NSInteger
@param result 使用NSInteger接收扫描到的字符串
@return 是否扫描到
*/
- (BOOL)scanInteger:(nullable NSInteger *)result;
/**
扫描long long
@param result 使用long long接收扫描到的字符串
@return 是否扫描到
*/
- (BOOL)scanLongLong:(nullable long long *)result;
/**
扫描unsigned long long
@param result 使用unsigned long long接收扫描到的字符串
@return 是否扫描到
*/
- (BOOL)scanUnsignedLongLong:(nullable unsigned long long *)result;
/**
扫描float
@param result 使用float接收扫描到的字符串
@return 是否扫描到
*/
- (BOOL)scanFloat:(nullable float *)result;
/**
扫描double
@param result 使用double接收扫描到的字符串
@return 是否扫描到
*/
- (BOOL)scanDouble:(nullable double *)result;
/**
扫描十六进制(可选以“0x”或“0x”为前缀)
@param result 使用unsigned接收扫描到的字符串转换为十进制
@return 是否扫描到
*/
- (BOOL)scanHexInt:(nullable unsigned *)result;
/**
扫描十六进制(可选以“0x”或“0x”为前缀)
@param result 使用unsigned long long接收扫描到的字符串转换为十进制
@return 是否扫描到
*/
- (BOOL)scanHexLongLong:(nullable unsigned long long *)result;
/**
扫描十六进制(对应于%a或%A格式。需要“0x”或“0x”前缀)
@param result 使用float接收扫描到的字符串转换为十进制
@return 是否扫描到
*/
- (BOOL)scanHexFloat:(nullable float *)result;
/**
扫描十六进制(对应于%a或%a格式。需要“0x”或“0x”前缀)
@param result 使用double接收扫描到的字符串转换为十进制
@return 是否扫描到
*/
- (BOOL)scanHexDouble:(nullable double *)result;
/**
扫描字符串(对应于%a或%a格式。需要“0x”或“0x”前缀)
@param result 使用double接收扫描到的字符串转换为十进制
@return 是否扫描到
*/
/**
扫描字符串
@param string 要扫描的字符串
@param result 扫描到的字符串
@return 是否扫描到
*/
- (BOOL)scanString:(NSString *)string
intoString:(NSString * _Nullable * _Nullable)result;
/**
扫描字符串
@param set 要扫描的C字符
@param result 扫描到的字符串
@return 是否扫描到
*/
- (BOOL)scanCharactersFromSet:(NSCharacterSet *)set
intoString:(NSString * _Nullable * _Nullable)result;
/**
扫描字符串
@param string 要扫描的字符串
@param result 扫描到的字符串和它前面的字符串
但是如果前面有部分字符串被其他扫描方式扫描过,则不会保留被扫描的部分
@return 是否扫描到
*/
- (BOOL)scanUpToString:(NSString *)string
intoString:(NSString * _Nullable * _Nullable)result;
/**
扫描字符串
@param string 要扫描的C字符
@param result 扫描到的字符串和它前面的字符串
但是如果前面有部分字符串被其他扫描方式扫描过,则不会保留被扫描的部分
@return 是否扫描到
*/
- (BOOL)scanUpToCharactersFromSet:(NSCharacterSet *)set
intoString:(NSString * _Nullable * _Nullable)result;
/** 是否扫描完毕 */
@property (getter=isAtEnd, readonly) BOOL atEnd;
/** 便利构造 */
+ (instancetype)scannerWithString:(NSString *)string;
+ (id)localizedScannerWithString:(NSString *)string;