Определение того, является ли строка действительной целочисленной целью C IOS - PullRequest
1 голос
/ 04 мая 2011

Я занимаюсь разработкой приложений для iPad.Мне интересно, как я могу узнать, можно ли преобразовать строку в двойную или нет.Например, метод [myString floatValue] и метод numberFromString в NSNumberFormatter распознают некоторую строку, например «123rrrrr», в качестве действительного числа и возвращают его числовую часть, которая равна 123!

Не могли бы вы мне помочь?

Ответы [ 2 ]

0 голосов
/ 05 мая 2011

Метод 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;
}
0 голосов
/ 05 мая 2011

Вы можете использовать NSScanner для этих целей.У него есть методы для фильтрации чисел с плавающей точкой и двойников из строк.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...