确定字符串是否为有效整数目标C IOS

时间:2011-05-04 19:51:05

标签: objective-c ios4

我正在为iPad开发应用程序。我想知道如何找出一个字符串是否可以转换为double。例如,NSNumberFormatter的[myString floatValue]和numberFromString方法都将某些字符串(如“123rrrrr”)识别为有效数字,并返回其编号为123的部分!

你能帮帮我吗?

2 个答案:

答案 0 :(得分:0)

您可以将NSScanner用于这些目的。它有方法从字符串中过滤浮点数和双精度数。

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSScanner_Class/Reference/Reference.html

答案 1 :(得分:0)

NSNumberFormatter方法getObjectValue:forString:range:error可以满足您的需求。这将解析字符串的给定范围内的数字 - 将其设置为整个字符串 - 并返回其使用的字符串的范围 - 如果此范围未延伸到字符串的末尾,则数字后面会有垃圾。

这是一个简单的包装器:

- (BOOL) getNumberValue:(out NSNumber **)parsedNumber
              forString:(NSString *)inputString
                  error:(out NSError **)error
{
    NSNumberFormatter *parser = [NSNumberFormatter new];

    // remove whitespace so we can easily test if the whole string was parsed OK
    NSString *trimmed = [inputString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
    NSUInteger trimmedLength = [trimmed length];
    NSRange all = NSMakeRange(0, trimmedLength);

    BOOL status = [parser getObjectValue:parsedNumber forString:trimmed range:&all error:error];

    if(status && all.length != trimmedLength)
    {   // getObjectValue succeeded but garbage after number (if garbage before number getObjectValue will fail)
        if (error != NULL)
        {   // make appropriate error
            *error = [NSError errorWithDomain:NSCocoaErrorDomain
                                         code:NSFormattingError
                                     userInfo:[NSDictionary dictionaryWithObject:[NSString stringWithFormat:@"The value “%@” is invalid.", inputString]
                                                                          forKey:NSLocalizedDescriptionKey]];
        }
        status = NO;
    }

    return status;
}