NSScanner类的基本用法

NSScanner是一个类,用于在字符串中扫描指定的字符,尤其是把它们转换为数字和别的字符串。可以在创建NSScaner时指定它的string属性,然后scanner会按照你的要求从头到尾地扫描这个字符串的每个字符。

一.创建一个Scanner

NSScanner是一个类族, NSScanner是其中公开的一类。通常,可以用scannerWithString:localizedScannerWithString:方法初始化一个scanner。这两个方法都返回一个scanner对象并用你传递的字符串参数初始化其string属性。刚创建时scanner对象指向字符串的开头。scanner方法开始扫描,比如scanInt:scanDouble:scanString:intoString:。如果你要想扫描多遍,通常需要使用while循环。

float aFloat;  

NSScanner *theScanner = [NSScanner scannerWithString:aString];  

while ([theScanner isAtEnd] == NO) {  

    [theScanner scanFloat:&aFloat];  

}   

以上例子会循环的搜索字符串中的浮点值,并赋值给aFloat参数。这个时候isAtEnd便会紧接上一次搜索到的字符位置继续搜索看是否存在下一个浮点值,直至扫描结束。扫描动作的核心就是位置的变动。位置不停地在扫描中移动,直至结束扫描。
另外,还可以通过setCaseSensitive:方法设置是否忽略大小写,默认是忽略。

二.Scanner的使用

扫描操作从上次扫描的位置开始,并且继续往后扫描直到指定的内容出现为止(如果有的话)。
以字符串“137 small cases of bananas”为例,在扫描完一个整数之后,scanner的位置将变为3,也即数字后面的空格处。通常,你会继续扫描并跳过你不关心的字符。那么你可以用setScanLocation:方法跳过某几个字符(也可以用这个方法在发生某些错误后,重新开始扫描字符串的某部分)。如果你想跳过某种特殊的字符集中的字符时,可以使用setCharactersToBeSkipped:方法。scanner在任何扫描操作时会跳过空白字符之后才开始。但是当它找到一个可以扫描的字符时,它会用全部字符去和指定内容匹配。scanner默认情况下会忽略空白字符和换行符。注意,对于忽略字符,总是大小写敏感的。例如要忽略所有原音字母,你必须使用“AEIOUaeiou”,而不能仅仅是“AEIOU”或“aeiou”。
如果你想获取当前位置的某个字符串的内容,可以使用scanUpToString:intoString:方法(如果你不想保留这些字符,可以传递一个NULL给第2个参数)。
例如,以下列字符串为例:
137 small cases of bananas

下面的代码,可以从字符串中找出包装规格(small cases)和包装数量(137)。

int main(int argc, const char * argv[]) {
    @autoreleasepool {

        NSString *bananas = @"137 small cases of bananas";
        NSString *separatorString = @" of";
        NSScanner *aScanner = [NSScanner scannerWithString:bananas];
        NSInteger anInteger;
        [aScanner scanInteger:&anInteger];
        NSLog(@"%ld",(long)anInteger);
        NSString *container;
        [aScanner scanUpToString:separatorString intoString:&container];
        NSLog(@"%@",container);

    }
    return 0;
}

输出结果为:

三.NSScanner的几个方法

  1. 整形判断
- (BOOL)isPureInt:(NSString *)string{
NSScanner* scan = [NSScanner scannerWithString:string]; 
int val; 
return [scan scanInt:&val] && [scan isAtEnd];
}

2.浮点形判断:

- (BOOL)isPureFloat:(NSString *)string{
NSScanner* scan = [NSScanner scannerWithString:string]; 
float val; 
return [scan scanFloat:&val] && [scan isAtEnd];
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值