目标C:NSScanner扫描双重问题

时间:2011-09-21 12:19:51

标签: iphone objective-c ios

在我的iPhone应用程序中,我试图理解字符串是否是有效数字,下面的代码大部分时间都有效,但是当我有一个以数字开头并以文本结尾的值时,它会错误地返回“true”,例如“34rty”

if([[NSScanner scannerWithString:value] scanDouble:NULL] ){
     val=[NSNumber numberWithDouble:[value doubleValue]];
}   

这里有什么问题?

2 个答案:

答案 0 :(得分:2)

scanDouble通过引用返回。

NSString *string = @"34rty";
NSScanner *scanner = [NSScanner scannerWithString:string];
double doubleValue;
[scanner scanDouble:&doubleValue];
NSNumber *doubleNumber = [NSNumber numberWithDouble:doubleValue];
NSLog(@"doubleValue: %f", doubleValue);
NSLog(@"doubleNumber: %@", doubleNumber);

NSLog输出:

doubleValue: 34.000000
doubleNumber: 34

如果有前面的文字,您必须扫描到该号码。

正如@Benjamin所说,RegEx可能是更好的选择。

答案 1 :(得分:-2)

NSScanner在第一个匹配字符处停止。所以它找到'3',当它扫描一个double时返回正数,然后停止运行。它不会检查每个角色。

对于此目的,REGEX检查是更好的选择。