NSScanner的应用实例
NSScanner是系统提供的一个可以扫描字符串中内容的方法,由于location这个属性的特性,NSScanner常常配合循环使用
先看看NSScanner的几个基本属性
@property (readonly, copy) NSString *string; //通过这个属性可以用getter方法导出scanner初始化时设置string
@property NSUInteger scanLocation; //最重要的属性,代表scanner目前扫描的位置,可以使用setter方法
@property (nullable, copy) NSCharacterSet *charactersToBeSkipped; //扫描时需要跳过的字符
@property BOOL caseSensitive; //忽略大小写区别
NSScanner的常用方法
1.scanString: intoString:
在scanner中搜索目标字符串,如果第一个字符和目标字符串相等,return 1,如果第一个字符和目标字符串不相等,return 0.intoString为返回的目标字符串(也可以设置为nil),scanner.scanLocation值变成目标字符串后面一位
2.scanUpToString: intoString:
在scanner中搜索目标字符串,如果第一个字符和目标字符串相等,return 0,intoString为返回的目标字符串(也可以设置为nil),scanner.scanLocation值保留目标字符串前面一位
Scanner的实际应用
#import "NSString+Scanner.h" //创建了一个NSString的Category,方便方法的调用
@implementation NSString (Scanner)
//1.查找某个string里是否含有int值
- (BOOL)isPureInt
{
NSScanner *scanner = [[NSScanner alloc] initWithString:self];
int intValue;
return [scanner scanInt:&intValue] && [scanner isAtEnd];
}
//2.查找给定String中所含有的全部浮点数值
- (void)scanFloatValue
{
NSScanner *scanner = [[NSScanner alloc] initWithString:self];
float floatValue;
while (![scanner isAtEnd])
{
if ([scanner scanFloat:&floatValue])
{
NSLog(@"floatValue = %.2f",floatValue);
}
scanner.scanLocation++;//由于scanLocation的特殊机制,这里需要注意的是如果最后字符串最后一位是浮点数类型的话会crash,在最后一位拼接上一个字母就可以正常运行了.
}
}
在main. m中可以用NSString的对象直接调用方法
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
#import "NSString+Scanner.h"
int main(int argc, char * argv[]) {
NSString *intString = @"211231233423523511";
if ([intString isPureInt])
{
NSLog(@"是纯int");
}