Как бы вы проанализировали текст местоположения из Twitter, чтобы получить широту / долготу в Objective-C? - PullRequest
1 голос
/ 05 апреля 2010

Текст местоположения из Twitter может быть практически любым. Иногда клиенты Twitter устанавливают местоположение с широтой и долготой пользователя в следующем формате.

"\U00dcT: 43.05948,-87.908409"

Поскольку в Objective-C нет встроенной поддержки регулярных выражений, я рассматриваю возможность использования функций NSString, таких как rangeOfString, для извлечения значений с плавающей точкой из этой строки.

Для моей текущей цели я знаю значения, начинающиеся с 43 и 87, так что на этот раз я могу отключить эти значения, но я бы предпочел сделать это лучше.

Что бы вы сделали, чтобы разобрать широту / долготу из этой строки?

Ответы [ 2 ]

0 голосов
/ 05 апреля 2010

Этот способ не создаст почти столько же промежуточных объектов:

float latitude, longitude;
NSString *exampleString = @"\U00dcT: 43.05948,-87.908409";
NSScanner *scanner = [NSScanner scannerWithString:exampleString];
NSCharacterSet *digits = [NSCharacterSet decimalDigitCharacterSet];
[scanner scanUpToCharactersFromSet:digits intoString:null];
[scanner scanFloat:&lattitude];
[scanner scanUpToCharactersFromSet:digits intoString:null];
[scanner scanFloat:&longitude];
0 голосов
/ 05 апреля 2010

Кажется, это работает хорошо, но мне все еще интересно, какие другие подходы могли бы работать лучше.

- (CLLocation *)parseLocationText:(NSString *)lt {
    // location = "\U00dcT: 43.05948,-87.908409";

    NSString *strippedString = [lt stringByTrimmingCharactersInSet:[NSCharacterSet letterCharacterSet]];
    NSLog(@"strippedString: %@", strippedString);

    if ([strippedString rangeOfString:@","].location != NSNotFound) {
        NSArray *chunks = [strippedString componentsSeparatedByString: @","];
        if (chunks.count == 2) {
            NSLog(@"lat: %@", [chunks objectAtIndex:0]);
            NSLog(@"long: %@", [chunks objectAtIndex:1]);

            NSString *latitude = [chunks objectAtIndex:0];
            NSString *longitude = [chunks objectAtIndex:1];
            CLLocation *loc = [[CLLocation alloc] initWithLatitude:[latitude floatValue] longitude:[longitude floatValue]];
            [loc autorelease];
            return loc;
        }
    }

    return nil;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...