我有一个字符串
https://gdata.youtube.com/feeds/api/videos?q=4s-PbMuNooo
我想获得字符串4s-PbMuNooo。我如何解析NSString?
答案 0 :(得分:5)
简短回答:
NSString *myString = @"https://gdata.youtube.com/feeds/api/videos?q=4s-PbMuNooo";
NSArray *components = [myString componentsSeparatedByString:@"="];
NSString *query = [components lastObject];
问题:
1)如果q =之后的位包含另一个=
,该怎么办?2)如果缺少q =位怎么办?
更好的答案是read the documentation - NSString上有很多辅助方法可以获得子串。查找rangeOfString以找出equals的位置,并查找subStringWithRange以获得所需的位。
编辑:托马斯提出了关于URL解析的公平观点 - 请参阅他的回答here
答案 1 :(得分:2)
稍长但更完整的答案。希望这会有所帮助:
NSURL *url = [NSURL URLWithString: @"https://gdata.youtube.com/feeds/api/videos?param1=yeah¶m2="];
NSArray *listItems = [[url query] componentsSeparatedByString:@"&"];
NSMutableDictionary *keyValues = [NSMutableDictionary dictionaryWithCapacity:listItems.count];
for (NSString *item in listItems) {
NSArray *keyValue = [item componentsSeparatedByString:@"="];
NSAssert(keyValue.count == 2, @"Key value pair mismatch");
[keyValues setObject:[keyValue objectAtIndex:1] forKey:[keyValue objectAtIndex:0]];
}
NSLog(@"1: %@", [keyValues objectForKey:@"param1"]);
NSLog(@"2: %@", [keyValues objectForKey:@"param2"]);
答案 2 :(得分:1)
像这样:
NSArray *listItems = [yourString componentsSeparatedByString:@"="];
NSString *myFinalString=[NSString stringWithString:[listItems objectAtIndex:1]];
答案 3 :(得分:1)
我想尝试一下,所以这是我的代码处理多个参数:
NSURL *url = [NSURL URLWithString:@"https://gdata.youtube.com/feeds/api/videos?p=123123&q=234"];
NSArray *queryArray = [[url query] componentsSeparatedByString:@"&"];
for (NSString *queryString in queryArray) {
NSArray *queryComponents = [queryString componentsSeparatedByString:@"="];
if ([[queryComponents objectAtIndex:0] isEqualToString:@"q"]) {
NSLog(@"Found q: %@", [queryString substringFromIndex:2]);
} else {
NSLog(@"Did not find q.");
}
}
答案 4 :(得分:1)
这个问题及其标题选择得很糟糕 - 答案通常适用于拆分任何字符串的更一般的任务,但是因为这个问题实际上是关于拆分URL的不好。
以下是如何正确获取网址中的值:
要分解URL字符串,请先执行以下操作:
NSURL *url = [NSURL URLWithString:urlString];
然后检索参数(超过“?”的部分),如下所示:
NSString *query = [url query];
现在您可以继续使用componentsSeparatedByString将查询字符串拆分:@“&”如其他答案所示。