2010-08-13 32 views
15

En Objective C, ¿cómo puedo comprobar si una cadena/NSNumber es un entero o intc Objetivo: Comprobar si enteros/int/número

+0

Por favor, explique con más detalle A qué te refieres. Tanto NSString como NSNumber se pueden convertir a int o NSInteger, pero ni * is * an int ni NSInteger. – Chuck

+0

Bien, lo siento, necesito saber si un String o Int es un entero/entero. Vea que estoy dividiendo un número por otro número, pero el número que coloca un usuario puede no ser un int. Necesito comprobar si es un número int – Daniel

Respuesta

12

Usted puede utilizar el método intValue en NSString:

NSString *myString = @"123"; 
[myString intValue]; // returns (int)123 

Aquí está la documentación de Apple para él - devolverá 0 si no es un número entero válido: http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html#//apple_ref/occ/instm/NSString/intValue

Espero que ayude!

+0

¿Cómo puedo encontrar si una variable es una cadena? – Daniel

+0

Al igual que en, ¿desea verificar y ver si alguna entrada de usuario es simplemente una cadena simple o un número? Como dije antes, intValue devuelve 0 para cuando un NSString no es un entero válido.Digamos que está obteniendo información de una UITextView - [[myTextView text] intValue] devolvería una int válida si es posible, o 0 si no se puede validar como una int. – codykrieger

+0

Bueno, vea que el problema es. Algunas veces el usuario no ingresará ninguna entrada. porque no es requerido Y dado que estoy usando una matriz y agarrando el objeto de ella. Me estoy poniendo *** - [NSCFArray objectAtIndex:]: índice (3) más allá de los límites (3) tengo que comprobar si la matriz es válida de alguna manera? – Daniel

2

Para comprobar si un NSNumber si un intento entero:

const char *t = [(NSNumber *)value objCType]; 
if (strcmp("i", t) == 0); // YES if integer 
33

Si usted está tratando de determinar si existe o no una NSString tiene un valor numérico o no, trate de usar NSNumberFormatter.

-(BOOL) stringIsNumeric:(NSString *) str { 
    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
    NSNumber *number = [formatter numberFromString:str]; 
    [formatter release]; 
    return !!number; // If the string is not numeric, number will be nil 
} 
+4

¡¡Pensé que era el único que había hecho !! hack para obligar a boolean. ¡Bonito! –

+3

Esta pregunta es mejor que la [respuesta aprobada] (http://stackoverflow.com/a/3473806/377384) porque le da un resultado verdadero/falso. La respuesta aprobada no. –

+2

Esto es mejor, porque la respuesta aceptada no funciona como se espera si marca una cadena con letras que comienza con el número. El ejemplo "1234asdf" devolverá 1234, no 0, esto devuelve NO. Y "000" devolverá 0 y podría pensar que está mal, pero no es – jcesarmobile

0

Puede por supuesto en primer lugar determinar si es un NSString o NSNumber utilizando

[isKindOfClass objeto: [clase NSString]] etc ...

- BOOLVALUE - charValue - decimalValue - doubleValue - floatValue - intValue - integerValue - longLongValue - longValue - shortValue - unsignedCharValue - unsignedIntegerValue - unsignedIntValue - unsignedLongLongValue - unsignedLongValue - unsignedShortValue

son todos los métodos de NSNumber para obtener sus valores. NSString tiene algunas similares.

3

He puesto esto en mi categoría NSString (Util).

- (BOOL) isInt { 
    if ([self isEqualToString:@"0"]) 
     return YES; 
    return (self.intValue != 0); 
} 
2

Para NSString, si utiliza intValue/IntegerValue, hay ciertos casos en los que no se manejan, ya que toma en consideración sólo el comienzo de la cadena.

Por ejemplo @ "bl3h" no se consideró un entero, pero @ "3h" dio una potencia de 3

Mi solución para NSString:

Uso:

NSCharacterSet *charSet = [NSCharacterSet characterSetWithCharactersInString:strName]; 

NSCharacterSet *numSet = [NSCharacterSet decimalDigitCharacterSet]; 

if([numSet isSupersetOfSet: charSet]) 
{ 
    // It is an integer (or it contains only digits) 
}