美文网首页
NSScanner类

NSScanner类

作者: 边河 | 来源:发表于2018-08-02 09:57 被阅读18次

    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类

          本文链接:https://www.haomeiwen.com/subject/trhjvftx.html