【问题标题】:Determining Whether String is Valid Integer Objective C IOS判断字符串是否为有效整数 Objective C IOS
【发布时间】:2011-05-04 19:51:05
【问题描述】:

我正在为 iPad 开发应用程序。我想知道如何确定一个字符串是否可以转换为双精度。例如,NSNumberFormatter 的 [myString floatValue] 和 numberFromString 方法都将“123rrrrr”之类的字符串识别为有效数字,并返回其数字部分,即 123!

你能帮帮我吗?

【问题讨论】:

    标签: objective-c ios4


    【解决方案1】:

    您可以将 NSScanner 用于这些目的。它具有从字符串中过滤浮点数和双精度数的方法。

    http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSScanner_Class/Reference/Reference.html

    【讨论】:

      【解决方案2】:

      NSNumberFormatter 方法 getObjectValue:forString:range:error 会做你想做的事。这将解析字符串给定范围内的数字 - 将其设置为整个字符串 - 并返回它使用的字符串的范围 - 如果此范围没有扩展到字符串的末尾,则数字后面有垃圾。

      这是一个简单的包装器:

      - (BOOL) getNumberValue:(out NSNumber **)parsedNumber
                    forString:(NSString *)inputString
                        error:(out NSError **)error
      {
          NSNumberFormatter *parser = [NSNumberFormatter new];
      
          // remove whitespace so we can easily test if the whole string was parsed OK
          NSString *trimmed = [inputString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
          NSUInteger trimmedLength = [trimmed length];
          NSRange all = NSMakeRange(0, trimmedLength);
      
          BOOL status = [parser getObjectValue:parsedNumber forString:trimmed range:&all error:error];
      
          if(status && all.length != trimmedLength)
          {   // getObjectValue succeeded but garbage after number (if garbage before number getObjectValue will fail)
              if (error != NULL)
              {   // make appropriate error
                  *error = [NSError errorWithDomain:NSCocoaErrorDomain
                                               code:NSFormattingError
                                           userInfo:[NSDictionary dictionaryWithObject:[NSString stringWithFormat:@"The value “%@” is invalid.", inputString]
                                                                                forKey:NSLocalizedDescriptionKey]];
              }
              status = NO;
          }
      
          return status;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-11-05
        • 1970-01-01
        • 2010-11-14
        • 1970-01-01
        • 2010-09-21
        • 2013-09-09
        相关资源
        最近更新 更多