NSScanner类

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

你可能感兴趣的:(NSScanner类)