2013-09-07 3 views
2

Когда я хочу, чтобы преобразовать NSString в int
Я использую:NSString к Int вопрос

[string intValue]; 

Но как определить, является ли строка int значение? например, чтобы избежать ситуаций, как это:

[@"hhhuuukkk" intValue]; 

ответ

7
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 
} 
+1

Я понятия не имею, почему этот ответ опущен, он выглядит правильно для меня. - Вы даже можете улучшить * решение, добавив проверку на '[scanner isAtEnd]', так что вход «123foo» также распознается как неправильный. –

+1

@MartinR Да, это, безусловно, лучше, чем подход «Я знаю, я просто использую регулярные выражения» (также представленный выше) ... –

+0

Но теперь это не компилируется :-) –

0
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 
} 
0
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]*)$;

2

: 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]; 
} 
0
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.

+3

См. Ответ www.jensolsson.se выше. –

+0

Как уже отмечал Мартин, это также примет '@" 123hhhuuukkk "' как 'int'. –

Смежные вопросы