我有一个从公式生成的字符串,但是我只想使用该字符串,只要它的所有字符都是数字,如果不是,我想做一些不同的事情,例如显示错误消息。
我一直在环顾四周,但发现很难找到任何符合我想做的事情。我看过 NSScanner 但我不确定它是否检查整个字符串,然后我实际上不确定如何检查这些字符是否是数字
- (void)isNumeric:(NSString *)code{
NSScanner *ns = [NSScanner scannerWithString:code];
if ( [ns scanFloat:NULL] ) //what can I use instead of NULL?
{
NSLog(@"INSIDE IF");
}
else {
NSLog(@"OUTSIDE IF");
}
}
因此,经过几个小时的搜索,我偶然发现了一个完全符合我所寻找的实现。
所以如果你想检查它们是否是你的 NSString 中的任何字母数字字符,这里可以使用
-(bool) isNumeric:(NSString*) hexText
{
NSNumberFormatter* numberFormatter = [[[NSNumberFormatter alloc] init] autorelease];
NSNumber* number = [numberFormatter numberFromString:hexText];
if (number != nil) {
NSLog(@"%@ is numeric", hexText);
//do some stuff here
return true;
}
NSLog(@"%@ is not numeric", hexText);
//or do some more stuff here
return false;
}
希望这可以帮助。
像这样的事情会起作用:
@interface NSString (usefull_stuff)
- (BOOL) isAllDigits;
@end
@implementation NSString (usefull_stuff)
- (BOOL) isAllDigits
{
NSCharacterSet* nonNumbers = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
NSRange r = [self rangeOfCharacterFromSet: nonNumbers];
return r.location == NSNotFound && self.length > 0;
}
@end
然后像这样使用它:
NSString* hasOtherStuff = @"234 other stuff";
NSString* digitsOnly = @"123345999996665003030303030";
BOOL b1 = [hasOtherStuff isAllDigits];
BOOL b2 = [digitsOnly isAllDigits];
您不必像这样将功能包装在私有类别扩展中,但它确实使重用变得容易。
我比其他解决方案更喜欢这个解决方案,因为它永远不会溢出通过 NSScanner 扫描的一些 int/float - 位数几乎可以是任何长度。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)