NSScanner类
最近做项目,遇到了这个类,所以找了资料看了看,以后再加例子。
一、属性
@property (readonly, copy) NSString *string;
@property NSUInteger scanLocation;
@property (nullable, copy) NSCharacterSet *charactersToBeSkipped;
@property BOOL caseSensitive;
@property (nullable, retain) id locale;
NSScanner对象把NSString 对象的的字符解释和转化成 number和string 类型的值。在创建NSScanner对象的时候为它分配字符(string ),当你从NSScanner对象获取内容的时候,它会从头到尾遍历字符串(string)。
在 NSScanner 对象扫描字符串的时候,你可以通过设置属性charactersToBeSkipped忽略某些字符。在扫描字符串之前,那些位于忽略字符集中的字符将会被跳过。默认的忽略字符是空格和回车字符。
可以通过[[scanner string] substringFromIndex:[scanner scanLocation]]获取未扫描的字符串。
- scanLocation,下次扫描开始的位置,如果该值炒出了string的区域,将会引起NSRrangeException,该属性发生错误后重新扫描时非常有用;
- charactersToBeSkipped,在扫描时被跳过的字符集,默认是空格和回车键。被跳过的字符集优先于扫描的字符集:例如一个scanner被跳过的字符集为空格,通过scanInt:去查找字符串中的整形数时,首先做的不是扫描,而是跳过空格,直到找到十进制数据或者其他的字符。在字符被扫描的时候,跳过功能就失效了,如果你扫描的字符和跳过的字符是一样的,结果将是未知的。被跳过的字符是一个唯一值,scanner不会将忽略大小写的功能应用于它,也不会用这些字符做一些组合,如果在扫描字符串的时候你想忽略全部的元音字符,就要将字符集设置成“AEIOUaeiou”;
- caseSensitive,是否区分字符串中大小写的标志。默认为NO,注意:该设置不会应用到被跳过的字符集;
- locale,scanner的locale对它从字符串中区分数值产生影响,它通过locale的十进制分隔符区分浮点型数据的整数和小数部分。一个没有locale的scanner用非定域值。新的scanner若没有设置locale,使用默认locale。
二、方法
创建方法
- (instancetype)initWithString:(NSString *)string NS_DESIGNATED_INITIALIZER;
+ (instancetype)scannerWithString:(NSString *)string;
+ (id)localizedScannerWithString:(NSString *)string;
- 创建方法
- initWithString,返回值是NSScanner对象,该对象通过扫描string完成初始化;
- scannerWithString,返回值是扫描string字符串的NSScanner对象,该方法通过调用initWithString设置扫描字符串;
- localizedScannerWithString,返回值是通过用户默认的locale方式扫描字符串的NSScanner对象,该方法也是通过调用initWithString设置扫描字符串。
扫描方法
- 扫描数字类型,结果是result。hex是扫描十六进制类型的。
- (BOOL)scanInt:(nullable int *)result;
- (BOOL)scanInteger:(nullable NSInteger *)result;
- (BOOL)scanLongLong:(nullable long long *)result;
- (BOOL)scanUnsignedLongLong:(nullable unsigned long long *)result;
- (BOOL)scanFloat:(nullable float *)result;
- (BOOL)scanDouble:(nullable double *)result;
- (BOOL)scanHexInt:(nullable unsigned *)result;
- (BOOL)scanHexLongLong:(nullable unsigned long long *)result;
- (BOOL)scanHexFloat:(nullable float *)result;
- (BOOL)scanHexDouble:(nullable double *)result;
- 扫描指定字符串或字符集合,scanCharacterFromSet是指扫描指定字符集合元素组合成的字符串,intoString指的是扫描出来的结果。
- (BOOL)scanString:(NSString *)string intoString:(NSString * _Nullable * _Nullable)result;
- (BOOL)scanCharactersFromSet:(NSCharacterSet *)set intoString:(NSString * _Nullable * _Nullable)result;
- 扫描字符一直到出现指定的字符串和字符集合内容 ,途中扫描的字符串内容会从introStrign参数中返回
- (BOOL)scanUpToString:(NSString *)string intoString:(NSString * _Nullable * _Nullable)result;
- (BOOL)scanUpToCharactersFromSet:(NSCharacterSet *)set intoString:(NSString * _Nullable * _Nullable)result;
注意: scanner方法开始扫描,比如scanInt,scanDouble,如果你想扫描多变,通常需要使用while循环。
参考:https://blog.csdn.net/u010545480/article/details/56286369
https://developer.apple.com/documentation/foundation/nsdecimalnumber?language=objc
网友评论