我如何解析NSString?

时间:2011-12-15 13:31:27

标签: ios nsstring

我有一个字符串

https://gdata.youtube.com/feeds/api/videos?q=4s-PbMuNooo

我想获得字符串4s-PbMuNooo。我如何解析NSString?

5 个答案:

答案 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&param2="];
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将查询字符串拆分:@“&”如其他答案所示。