Как мне разобрать строку NSString? - PullRequest
1 голос
/ 15 декабря 2011

У меня есть строка

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

Я хочу получить строку 4s-PbMuNooo.Как мне разобрать строку NSString?

Ответы [ 5 ]

5 голосов
/ 15 декабря 2011

Короткий ответ:

NSString *myString = @"https://gdata.youtube.com/feeds/api/videos?q=4s-PbMuNooo";
NSArray *components = [myString componentsSeparatedByString:@"="];
NSString *query = [components lastObject];

Проблемы:

1) Что если в бите после q = содержится другой =

2) Что если бит q =

Лучший ответ для вас - , прочитайте документацию - на NSString есть много вспомогательных методов, которые помогут вам получить подстроки.Ищите rangeOfString, чтобы узнать, где будут равные, и subStringWithRange, чтобы получить нужный бит.

РЕДАКТИРОВАТЬ: Томас поднял справедливую точку зрения о разборе URL - смотрите его ответ здесь

2 голосов
/ 18 декабря 2011

Немного более длинный, но более полный ответ.Надеюсь, это поможет:

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"]);
1 голос
/ 22 марта 2014

Вопрос и его заголовок выбраны неправильно - ответы, как правило, правильные для более общей задачи разделения ЛЮБОЙ строки, но плохо для разделения URL-адресов, поскольку этот вопрос на самом деле о.

Вот какправильно получить значения из URL:

Чтобы разбить строку URL, сначала выполните следующее:

NSURL *url = [NSURL URLWithString:urlString];

Затем извлеките параметры (часть после «?») следующим образом:

NSString *query = [url query];

Теперь вы можете разбить эту строку запроса, используя componentSeparatedByString: @ "&", как показано в других ответах.

1 голос
/ 15 декабря 2011

Я хотел немного попробовать это, поэтому вот мой код, который обрабатывает более одного параметра:

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.");
    }
}
1 голос
/ 15 декабря 2011

Как это:

NSArray *listItems = [yourString componentsSeparatedByString:@"="];
NSString *myFinalString=[NSString stringWithString:[listItems objectAtIndex:1]];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...