如何检查字符串的内容是否为数值?

Jav*_*aby 1 objective-c xcode4

我看过这个问题,但已经2岁了.是否有更好的\更容易\更新的方法来检查字符串是否具有数值.例如1或1.54或-1或-1.54等

zap*_*aph 7

bool status;
NSScanner *scanner;
NSString *testString;
double result;

scanner = [NSScanner scannerWithString:testString];
status = [scanner scanDouble:&result];
status = status && scanner.scanLocation == string.length;
Run Code Online (Sandbox Code Playgroud)

如果status == YES,则字符串是完全数字.

或者@Dave从这个SO回答中指出:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
number = [formatter numberFromString:string];
status = number != nil;
Run Code Online (Sandbox Code Playgroud)

(我没有泄漏,我正在使用ARC :-))

  • 好吧,如果`alloc/init`打扰你那么多你可以使用`new`虽然它已被弃用:NSNumberFormatter*formatter =`[NSNumberFormatter new];`但我不建议这样做.Xcode 4.2和IOS 4.3及更高版本中提供的ARC(自动引用计数)消除了对"保留","释放"或"自动释放"的需要,实际上它们是不允许的.好的,我的评论:通常会收到一条评论,说明代码片段中缺少某个版本,我的讽刺评论是针对这种可能性的,最终我们需要解决在ARC下的代码中不需要发布/自动释放的问题. (2认同)