我制作了一个用户输入数据的应用,它从谷歌地图中获取了一个网址 - [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的新手,但如果有更有效的方法请分享。 :)
感谢所有花时间提供帮助的人。 再见!
答案 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(缩放字符)。如果他们将其更改为其他内容,您的号码仍将被正确解析。