如何找出 objective-c 中的输入是数字还是文本



我尝试过搜索,但我认为我的谷歌技能不够好,所以我正在寻求人们的帮助。我正在扫描一个字符串并获取每个元素。我需要找出它是数字还是文本。我以这种方式进行了检查:

// Try to convert to double
@try{
double whatever=[myString doubleValue];
// If text is stored in myString, then it should throw an exception
} @catch (NSException *e){
// Do whatever I need, but here I know that it's text, not a number

}

但是我发现 Objective-C 不会抛出异常,它只是返回 0。我不能依赖用户不会使用零作为输入的事实,我该怎么办?

提前感谢,我很确定有这样的踏板,我只是没有找到它们......

试试这个:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber *number = [formatter numberFromString:myString];
if (number) {
  // it's a number
} else {
  // it's not a number
}

转换为双精度并返回字符串。如果它与来源匹配,那么它是一个双精度。 小心前导空格和尾随空格。

您可以使用类 NSScanner 来查找您是否通过此方法获得了有效的double

- (BOOL)scanDouble:(double *)doubleValue

使用字符串初始化扫描仪后。


为什么(double *)
因为您希望该方法返回给您 2 个信息,the doubleValueis it a valid double .后者由 BOOL 给出,对于前者,只有指针可以从方法调用中获取值(除了返回值)

参数
双倍值
返回时,包含扫描值。溢出时包含 HUGE_VAL 或 –HUGE_VAL,下溢时包含 0.0。
返回值
如果接收方找到有效的浮点表示形式,则为 YES,否则为 NO。

NSMutableString *stringElement = [NSMutableString stringWithCapacity:[yourString length]];
for (int i=0; i<[yourString length]; i++) {
    if (isdigit([stringElement characterAtIndex:i])) {
      //is digit
    }
}

示例:

NSError* error;
NSString* string=@"10";
NSNumberFormatter* formatter=[NSNumberFormatter new];
formatter.numberStyle= NSNumberFormatterDecimalStyle; // set whatever style you need
NSNumber* number;
if([formatter getObjectValue: &number forString: string errorDescription: &error])
{
    // You got the number
    NSLog(@"%@",number);
}
else
{
    // haven't got the number, the string is invalid
    NSLog(@"%@",error);
}

最新更新