2011-02-01 17 views
6

Poniższy kod identyfikuje, czy ciąg jest liczbą całkowitą - to znaczy, że ciąg zawiera tylko cyfry. Ale nienawidzę tego kodu. Jaki jest lepszy sposób?Jaki jest lepszy sposób sprawdzenia, czy ciąg jest liczbą całkowitą na iPhone?

NSString *mightBeAnInteger = fooString; 
int intValue = [fooString intValue]; 
if (intValue > 0 
    && [[NSString stringWithFormat:@"%d",intValue] isEqualToString:mightBeAnInteger]) { 
    NSLog(@"mightBeAnInteger is an integer"); 
} 
+0

możliwe duplikat [? NSString jest całkowitą] (http://stackoverflow.com/questions/565696/nsstring-is-integer) –

Odpowiedz

20

[fooString rangeOfCharacterFromSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]].location == NSNotFound będzie TAK, jeśli ciąg zawiera znaki numeryczne tylko w nim.

Należy zauważyć, że nie powoduje to przechwycenia liczb ujemnych, więc należy dodać znak ujemny (prawdopodobnie poprzez pobranie mutableCopy i dodanie znaku).

+1

Dobra odpowiedź, ale można po prostu użyć niestandardowy konstruktor NSCharacterSet characterSetWithCharactersInString: podanie 0-9 + "." & "-". –

+0

Brak okresowych plakatów poszukiwanych liczb całkowitych. Osobiście wolałbym dodać znak niż użyć konstruktora ciągu, ale to tylko ja! – kevboh

+0

Ta odpowiedź nie obejmuje przypadków takich jak: @ "1111-1111", który nie jest prawidłowym int. Lepiej jest sprawdzić, czy [fooString intValue] <0 zamiast tylko dodawać - znak. –

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

źródło: Objective c: Check if integer/int/number

Powiązane problemy