可能重複:
iphone how to check that a string is numeric only如何檢查的NSString是數字或不
我有一個NSString的,然後我想檢查字符串是數字或沒有。
我的意思是
NSString *val = @"5555" ;
if(val isNumber){
return true;
}else{
retun false;
}
我怎樣才能在目標C做到這一點?
可能重複:
iphone how to check that a string is numeric only如何檢查的NSString是數字或不
我有一個NSString的,然後我想檢查字符串是數字或沒有。
我的意思是
NSString *val = @"5555" ;
if(val isNumber){
return true;
}else{
retun false;
}
我怎樣才能在目標C做到這一點?
你可以使用rangeOfCharacterFromSet:
:
@interface NSString (isNumber)
-(BOOL)isInteger;
@end
@interface _IsNumber
+(void)initialize;
+(void)ensureInitialization;
@end
@implementation NSString (isNumber)
static NSCharacterSet* nonDigits;
-(BOOL)isInteger {
/* bit of a hack to ensure nonDigits is initialized. Could also
make nonDigits a _IsNumber class variable, rather than an
NSString class variable.
*/
[_IsNumber ensureInitialization];
NSRange nond = [self rangeOfCharacterFromSet:nonDigits];
if (NSNotFound == nond.location) {
return YES;
} else {
return NO;
}
}
@end
@implementation _IsNumber
+(void)initialize {
NSLog(@"_IsNumber +initialize\n");
nonDigits = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
}
+(void)ensureInitialization {}
@end
這是不是有點矯枉過正?使用NSScanner或(不太可靠)只是在字符串上調用'floatValue'或'intValue'有什麼問題?但是,即使對於包含數千位數字的數字,您的方法也會返回「YES」,這可能更有用。此外,你的字符集將被自動釋放(如果它沒有被運行時緩存)。 – dreamlax 2010-01-07 21:01:38
@dreamlax:'NSScanner'和'* Value'方法都將接受以數字開頭但其後有其他字符的字符串。根據OP的實際目的,這種行爲可能會更好或可能不可接受。 'NSNumberFormatter'可能是最好的解決方案,因爲它適用於浮點運算並考慮本地化。 – outis 2010-01-07 22:45:37
這不是區域意識。 – 2014-07-08 12:12:10
使用[NSNumberFormatter numberFromString: s]
。如果指定的字符串是非數字的,則返回nil。您可以配置NSNumberFormatter爲您的特定場景定義「數字」。
#import <Foundation/Foundation.h>
int
main(int argc, char* argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSLocale *l_en = [[NSLocale alloc] initWithLocaleIdentifier: @"en_US"];
NSLocale *l_de = [[NSLocale alloc] initWithLocaleIdentifier: @"de_DE"];
NSNumberFormatter *f = [[NSNumberFormatter alloc] init];
[f setLocale: l_en];
NSLog(@"returned: %@", [f numberFromString: @"1.234"]);
[f setAllowsFloats: NO];
NSLog(@"returned: %@", [f numberFromString: @"1.234"]);
[f setAllowsFloats: YES];
NSLog(@"returned: %@", [f numberFromString: @"1,234"]);
[f setLocale: l_de];
NSLog(@"returned: %@", [f numberFromString: @"1,234"]);
[l_en release];
[l_de release];
[f release];
[pool release];
}
什麼算作一個數字?整型?浮點?科學計數法?帶前導「0x」的十六進制?具有領先「0b」的二進制文件? – outis 2010-01-07 13:01:42