我有一个大小未定的字符串,其中包含一个 8 位数字。例子:
This is 123456 a string
This is a new string 123456
123456 This is another string
如何提取此类数字的整数值?
我有一个大小未定的字符串,其中包含一个 8 位数字。例子:
This is 123456 a string
This is a new string 123456
123456 This is another string
如何提取此类数字的整数值?
NSString
有一个实例方法-integerValue
,它返回从字符串内容中提取的整数值。所以[@"123456" integerValue]
会回来123456
。
我认为你想要的是一个 NSScanner。让扫描仪扫描到第一次出现的 decimalDigitCharacterSet
,然后使用scanInteger:
它来获取它找到的 NSInteger 值。
您可以使用正则表达式从字符串中提取任何给定格式的数字。如果您只想从任何给定字符串中获取一个整数(在本例中为第一个整数):
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];
从长度不确定的字符串中提取多个给定数字。
#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
提取NSURL
. 也许您应该发布 URL 以寻求替代解决方案。