Когда я хочу, чтобы преобразовать NSString
в int
Я использую:NSString к Int вопрос
[string intValue];
Но как определить, является ли строка int
значение? например, чтобы избежать ситуаций, как это:
[@"hhhuuukkk" intValue];
Когда я хочу, чтобы преобразовать NSString
в int
Я использую:NSString к Int вопрос
[string intValue];
Но как определить, является ли строка int
значение? например, чтобы избежать ситуаций, как это:
[@"hhhuuukkk" intValue];
int value;
NSString *s = @"huuuk";
if([[NSScanner scannerWithString:s] scanInt:&value]) {
//Is int value
}
else {
//Is not int value
}
Редактировать: добавлено isAtEnd проверка в соответствии с предложением Мартина R. Это позволит убедиться, что это всего лишь цифры во всей строке.
int value;
NSString *s = @"huuuk";
NSScanner *scanner = [NSScanner scannerWithString:s];
if([scanner scanInt:&value] && [scanner isAtEnd]) {
//Is int value
}
else {
//Is not int value
}
NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber * amt = [f numberFromString:@"STRING"];
if(amt)
{
// convert to int if you want to like you have done in your que.
//valid amount
}
else
{
// not valid
}
NSString *yourStr = @"hhhuuukkk";
NSString *regx = @"(-){0,1}(([0-9]+)(.)){0,1}([0-9]+)";
NSPredicate *chekNumeric = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regx];
BOOL isNumber = [chekNumeric evaluateWithObject:yourStr];
if(isNumber)
{
// Your String has only numeric value convert it to intger;
}
else
{
// Your String has NOT only numeric value also others;
}
Только для целого изменения значения Rgex шаблона для ^(0|[1-9][0-9]*)$
;
: C способ: использовать strtol()
и проверить errno
:
errno = 0;
int n = strtol(str.UTF8String, NULL, 0);
if (errno != 0) {
perror("strtol");
// or handle error otherwise
}
какао путь: использовать NSNumberFormatter
:
NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init];
[fmt setGeneratesDecimalNumbers:NO];
NSNumber *num = nil;
NSError *err = nil;
NSRange r = NSMakeRange(0, str.length);
[fmt getObjectValue:&num forString:str range:&r error:&err];
if (err != nil) {
// handle error
} else {
int n = [num intValue];
}
NSString *stringValue = @"hhhuuukkk";
if ([[NSScanner scannerWithString:stringValue] scanInt:nil]) {
//Is int value
}
else{
//Is not int value
}
[[NSScanner scannerWithString:stringValue] scanInt:nil]
будет проверять "stringValue" имеет целочисленное значение.
Он возвращает BOOL, указывающий, была ли найдена подходящая стоимость int.
См. Ответ www.jensolsson.se выше. –
Как уже отмечал Мартин, это также примет '@" 123hhhuuukkk "' как 'int'. –
Я понятия не имею, почему этот ответ опущен, он выглядит правильно для меня. - Вы даже можете улучшить * решение, добавив проверку на '[scanner isAtEnd]', так что вход «123foo» также распознается как неправильный. –
@MartinR Да, это, безусловно, лучше, чем подход «Я знаю, я просто использую регулярные выражения» (также представленный выше) ... –
Но теперь это не компилируется :-) –