【问题标题】:NSString is integer?NSString 是整数吗?
【发布时间】:2010-10-08 14:50:57
【问题描述】:

如何检查 NSString 的内容是否为整数值?有没有现成的方法?

必须有一些更好的方法然后做这样的事情:

- (BOOL)isInteger:(NSString *)toCheck {
  if([toCheck intValue] != 0) {
    return true;
  } else if([toCheck isEqualToString:@"0"]) {
    return true;
  } else {
    return false;
  }
}

【问题讨论】:

    标签: objective-c cocoa nsstring


    【解决方案1】:

    您可以使用-intValue-integerValue 方法。如果字符串不是以整数开头,则返回零,这有点可惜,因为零是整数的有效值。

    更好的选择可能是使用[NSScanner scanInt:],它返回一个BOOL,表明它是否找到了合适的值。

    【讨论】:

    • 正确!一个简单的 [[NSScannerscannerWithString:value] scanInt:nil] 将检查“value”是否具有整数值。谢谢!
    • 如果字符串为空,integerValue 会返回什么值?
    • @ASalcedo 如果方法返回 NO,您可能无法依赖内容。
    • 注意 -[NSScanner scanInt:] 也为 @"00ab" 返回 true -- 使用下面 Steven Green 的回答中的 -[NSScanner isAtEnd],或转换为 NSNumber (stackoverflow.com/questions/1448804/…) 来处理此类情况
    【解决方案2】:

    类似这样的:

    NSScanner* scan = [NSScanner scannerWithString:toCheck]; 
    int val; 
    return [scan scanInt:&val] && [scan isAtEnd];
    

    【讨论】:

      【解决方案3】:

      基于来自@kevbo 的answer,这将检查整数>= 0:

      if (fooString.length <= 0 || [fooString rangeOfCharacterFromSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]].location != NSNotFound) {
          NSLog(@"This is not a positive integer");
      }
      

      上述的快速版本:

      func getPositive(incoming: String) -> String {
          if (incoming.characters.count <= 0) || (incoming.rangeOfCharacterFromSet(NSCharacterSet.decimalDigitCharacterSet().invertedSet) != nil) {
              return "This is NOT a positive integer"
          }
          return "YES! +ve integer"
      }
      

      【讨论】:

        【解决方案4】:

        不要忘记带小数点的数字!!!

        NSMutableCharacterSet *carSet = [NSMutableCharacterSet characterSetWithCharactersInString:@"0123456789."];
        BOOL isNumber = [[subBoldText stringByTrimmingCharactersInSet:carSet] isEqualToString:@""];
        

        【讨论】:

          【解决方案5】:
          func getPositive(input: String) -> String {
              if (input.count <= 0) || (input.rangeOfCharacter(from: NSCharacterSet.decimalDigits.inverted) != nil) {
                  return "This is NOT a positive integer"
              }
              return "YES! integer"
          }
          

          更新@coco 对 Swift 5 的回答

          【讨论】:

            猜你喜欢
            • 2011-11-09
            • 2014-04-22
            • 2012-08-27
            • 1970-01-01
            • 2011-03-10
            • 1970-01-01
            • 2011-09-23
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多