从可变大小的字符串中提取8位数字

时间:2013-02-05 00:56:51

标签: objective-c nsstring

我有一个未确定大小的字符串,其中包含一个8位数字。例如:

This is 123456 a string
This is a new string 123456
123456 This is another string

如何提取此数字的整数值?

4 个答案:

答案 0 :(得分:2)

NSString有一个实例方法-integerValue,它返回从字符串内容中提取的整数值。因此[@"123456" integerValue]将返回123456

答案 1 :(得分:1)

我认为你想要的是NSScanner。让扫描程序扫描到第一次出现decimalDigitCharacterSet,然后使用scanInteger:获取它找到的NSInteger值。

答案 2 :(得分:1)

您可以使用正则表达式从字符串中提取任何给定格式的数字。如果你只想从任何给定的字符串中获取一个整数(在这种情况下,第一个整数):

NSString* str = @"This is 123456 a string";

NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:@".*?(\\d+).*?" options:NULL error:nil];

NSArray* results = [regex matchesInString:str options:NULL range:NSMakeRange(0, [str length])];

NSString* str2 = [str substringWithRange:[(NSTextCheckingResult*)[results objectAtIndex:0] rangeAtIndex:1]];

NSLog(@"%@",str2);

NSInteger intResult = [str2 integerValue];

答案 3 :(得分:1)

从未确定长度的字符串中提取多个给定数字。

#import <Foundation/Foundation.h>

NSNumber* numberFromStringWithDigits(NSString* string, NSUInteger digits)
{
      NSScanner *scanner = [NSScanner scannerWithString:string];  
      NSCharacterSet *allowed = [NSCharacterSet decimalDigitCharacterSet];  
      while ([scanner isAtEnd] == NO) {  
          NSString *buffer;  
          if ([scanner scanCharactersFromSet:allowed intoString:&buffer]) {  
              if ([buffer length]==digits){
                  return [NSNumber numberWithInt:[buffer integerValue]];
              }
          } else {        
              [scanner setScanLocation:([scanner scanLocation] + 1)];  
          } 
      }
      return nil;
}

int main(int argc, char *argv[]) {
    @autoreleasepool {
        NSString *url = @"http://garb23age.com/x555xx/xx12345678xxxxxx";
        NSDate *startTime = [NSDate date];  

        NSNumber *n = numberFromStringWithDigits(url,8);

        NSTimeInterval elapsedTime = [startTime timeIntervalSinceNow];  
        NSLog(@"%@ in %f seconds",n,-elapsedTime); // 12345678 in 0.000188 seconds
    }
}

@Bri An C:你想要的是提取parameterString的{​​{1}}。也许您应该发布URL以寻求替代解决方案。