Как разобрать строки в Objective C - PullRequest
5 голосов
/ 02 июня 2009

Может кто-нибудь помочь мне извлечь значение int timestamp из этой строки "/ Date (1242597600000) /" в Objective C

Я бы хотел получить 1242597600000.

Thx

Ответы [ 3 ]

14 голосов
/ 02 июня 2009

Один простой метод:

NSString *timestampString = @"\/Date(1242597600000)\/";
NSArray *components = [timestampString componentsSeparatedByString:@"("];
NSString *afterOpenBracket = [components objectAtIndex:1];
components = [afterOpenBracket componentsSeparatedByString:@")"];
NSString *numberString = [components objectAtIndex:0];
long timeStamp = [numberString longValue];

В качестве альтернативы, если вы знаете, что строка всегда будет одинаковой длины и формата, вы можете использовать:

NSString *numberString = [timestampString substringWithRange:NSMakeRange(7,13)];

И еще один метод:

NSRange openBracket = [timestampString rangeOfString:@"("];
NSRange closeBracket = [timestampString rangeOfString:@")"];
NSRange numberRange = NSMakeRange(openBracket.location + 1, closeBracket.location - openBracket.location - 1);
NSString *numberString = [timestampString substringWithRange:numberRange];
12 голосов
/ 02 июня 2009

Существует более одного способа сделать это. Вот предложение с использованием NSScanner;

NSString *dateString = @"\/Date(1242597600000)\/";
NSScanner *dateScanner = [NSScanner scannerWithString:dateString];
NSInteger timestamp;

if (!([dateScanner scanInteger:&timestamp])) {
    // scanInteger returns NO if the extraction is unsuccessful
    NSLog(@"Unable to extract string");
}

// If no error, then timestamp now contains the extracted numbers.
3 голосов
/ 02 июня 2009
NSCharacterSet* nonDigits = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
NSString* digitString = [timestampString stringByTrimmingCharactersInSet:nonDigits];
return [digitString longValue];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...