扫描字符串,获取信息。 Xcode中

时间:2014-10-24 14:12:31

标签: objective-c url nsstring

我制作了一个用户输入数据的应用,它从谷歌地图中获取了一个网址 - [https://www.google.com.au/maps/search/nearest+pizza+shop/@-27.4823545,153.0297855,12z/data=!3m1!4b1

在中间你看到27.4823545,153.0297855这是长和拉特。因此,我可以使我的地图工作。但我真的需要知道如何扫描这个字符串(url被制成一个字符串)并只得到那些数字,我已经尝试过这个 - >

NSString *currentURL = web.request.URL.absoluteString;
    string1 = currentURL;



    NSScanner *scanner = [NSScanner scannerWithString:string1];
    NSString *token = nil;
    [scanner scanUpToString:@"@" intoString:NULL];
    [scanner scanUpToString:@"z" intoString:&token];

    label.text = token;

我认为我很可能犯了一个错误,因为我是Objective-c的新手,但如果有更有效的方法请分享。 :)

感谢所有花时间提供帮助的人。 再见!

1 个答案:

答案 0 :(得分:2)

解决方案: 从NSURL中提取路径。然后查看每个路径组件以提取坐标组件:

NSURL *url = [NSURL URLWithString:@"https://www.google.com.au/maps/search/nearest+pizza+shop/@-27.4823545,153.0297855,12z/data=!3m1!4b1"];
NSArray *components = [url.path componentsSeparatedByString:@"/"];
NSArray *results = nil;
for (NSString *comp in components) {
    if ([comp length] > 1 && [comp hasPrefix:@"@"]) {
        NSString *resultString = [comp substringFromIndex:1]; // removing the '@'
        results = [resultString componentsSeparatedByString:@","]; // lat, lon, zoom
        break;
    }
}
NSLog(@"results: %@", results);

将打印:

results: (
    "-27.4823545",
    "153.0297855",
    12z
)

此解决方案为您提供了许多用于数据验证的控制点。 希望这会有所帮助。

修改

摆脱" z"。我会将其视为带有十进制样式的数字格式化程序的特殊数字,并将该字符指定为正负后缀:

NSString *targetStr = @"12z";
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = NSNumberFormatterDecimalStyle;
formatter.positiveSuffix = @"z";
formatter.negativeSuffix = @"z";
NSNumber *result = [formatter numberFromString:targetStr];

var结果将包含'#'之前的正数或负数。你可以使用NSScanner来做这个伎俩,但我相信它不那么灵活。

作为旁注,获得那个" z"来自Google的API(缩放字符)。如果他们将其更改为其他内容,您的号码仍将被正确解析。