我有一个未确定大小的字符串,其中包含一个8位数字。例如:
This is 123456 a string
This is a new string 123456
123456 This is another string
如何提取此数字的整数值?
答案 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以寻求替代解决方案。