【问题标题】:Objective c: Check if integer/int/number目标c:检查整数/整数/数字
【发布时间】:2011-03-29 06:38:47
【问题描述】:

在目标 c 中,我如何检查字符串/NSNumber 是整数还是 int

【问题讨论】:

  • 请更全面地解释您的意思。 NSString 和 NSNumber 都可以转换为 int 或 NSInteger,但 is 都不是 int 或 NSInteger。
  • 好吧,抱歉,我需要知道 String 或 Int 是否是 int/integer。请参阅我将一个数字除以另一个数字,但用户输入的数字可能不是 int。我需要检查它是否是一个 int 数字

标签: objective-c variables nsstring int nsnumber


【解决方案1】:

如果您要确定NSString 是否具有数值,请尝试使用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
}

【讨论】:

  • 我以为我是唯一一个这样做的人! hack 强制转换为布尔值。不错!
  • 这个问题比approved answer 好,因为它给你一个真/假的结果。批准的答案没有。
  • 这样更好,因为如果您检查包含以数字开头的字母的字符串,则接受的答案不会按预期工作。示例“1234asdf”将返回 1234,而不是 0,这将返回 NO。而 "000" 将返回 0,你可能认为是错误的,但事实并非如此
  • 这取决于用户的语言环境吗?
【解决方案2】:

你可以在 NSString 上使用 intValue 方法:

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

这是 Apple 文档 - 如果它不是有效整数,它将返回 0:http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html#//apple_ref/occ/instm/NSString/intValue

希望有帮助!

【讨论】:

  • 如何判断变量是否为字符串?
  • 如,您想检查某些用户输入是否只是普通的旧字符串或数字?就像我上面所说的,当 NSString 不是有效整数时,intValue 返回 0。假设您从 UITextView 获取信息 - [[myTextView text] intValue] 如果可能会返回一个有效的 int,如果它不能被验证为 int,则返回 0。
  • 如果字符串代表实际的整数值0怎么办?
  • 小心这个。如果字符串不以整数值开头,这只会返回 0。像“123 street”这样的东西仍然会返回整数123。来源:developer.apple.com/library/mac/documentation/Cocoa/Reference/…
  • 我无法使用它,因为它并非在所有情况下都有效。
【解决方案3】:

我已将此归入我的类别NSString (Util)

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

【讨论】:

    【解决方案4】:

    如果是整数,则检查 NSNumber:

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

    【讨论】:

      【解决方案5】:

      对于 NSString,如果你使用 intValue/integerValue,有些情况不处理,因为它只考虑字符串的开头。

      例如,@"bl3h" 不被视为整数,但 @"3h" 给出的输出为 3

      我对 NSString 的解决方案:

      使用:

      NSCharacterSet *charSet = [NSCharacterSet characterSetWithCharactersInString:strName];
      
      NSCharacterSet *numSet = [NSCharacterSet decimalDigitCharacterSet];
      
      if([numSet isSupersetOfSet: charSet])
      {
           // It is an integer (or it contains only digits)
      }
      

      【讨论】:

        【解决方案6】:
        if( [(NSString *)someString intValue] )
        { /* Contains an int fosho! */ }
        
        if( [(NSNumber *)someNumber intValue] )
        { /* Contains an int wich is not 0.... :D */ }
        

        你当然可以先判断它是 NSString 还是 NSNumber 使用

        [Object isKindOfClass:[NSString class]] 等...

        --布尔值 – 字符值 – 十进制值 – 双值 – 浮点值 – 整数值 – 整数值 – 长长值 – 长值 – 短值 – 无符号字符值 – 无符号整数值 – 无符号整数值 – 无符号长长值 – 无符号长值 – 无符号短值

        都是 NSNumber 获取其值的方法。 NSString 有几个类似的。

        【讨论】:

          猜你喜欢
          • 2015-10-06
          • 1970-01-01
          • 2016-01-03
          • 1970-01-01
          • 2016-04-06
          • 1970-01-01
          • 1970-01-01
          • 2023-03-22
          • 1970-01-01
          相关资源
          最近更新 更多