IOS: NSString извлекает подстроку из строки - PullRequest
19 голосов
/ 18 января 2012

Эй, я ищу способ извлечь строку из другой строки. Он может быть любой длины и находиться в любой части строки, поэтому обычные методы не работают.

Например http://bla.com/bla?id=%1234%&something=%888%

То, что я хочу извлечь, это от id =% до следующего%.

Есть идеи?

Ответы [ 2 ]

71 голосов
/ 18 января 2012

Используйте метод rangeOfString:

NSRange range = [string rangeOfString:@"id=%"];
if (range.location != NSNotFound)
{
   //range.location is start of substring
   //range.length is length of substring
}

Затем можно разделить строку, используя методы substringWithRange:, substringFromIndex: и substringToIndex:, чтобы получить нужные биты.Вот решение вашей конкретной проблемы:

NSString *param = nil;
NSRange start = [string rangeOfString:@"id=%"];
if (start.location != NSNotFound)
{
    param = [string substringFromIndex:start.location + start.length];
    NSRange end = [param rangeOfString:@"%"];
    if (end.location != NSNotFound)
    {
        param = [param substringToIndex:end.location];
    }
}

//param now contains your value (or nil if not found)

В качестве альтернативы, вот общее решение для извлечения параметров запроса из URL, которое может быть более полезным, если вам нужно сделать это несколько раз:

- (NSDictionary *)URLQueryParameters:(NSURL *)URL
{
    NSString *queryString = [URL query];
    NSMutableDictionary *result = [NSMutableDictionary dictionary];
    NSArray *parameters = [queryString componentsSeparatedByString:@"&"];
    for (NSString *parameter in parameters)
    {
        NSArray *parts = [parameter componentsSeparatedByString:@"="];
        if ([parts count] > 1)
        {
            NSString *key = [parts[0] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
            NSString *value = [parts[1] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
            result[key] = value;
        }
    }
    return result;
}

Это не удаляет символы% из значений, но вы можете сделать это либо с помощью

NSString *value = [[value substringToIndex:[value length] - 1] substringFromIndex:1];

, либо с помощью чего-то вроде

NSString *value = [value stringByReplacingOccurencesOfString:@"%" withString:@""];

ОБНОВЛЕНИЕ: Начиная с iOS 8+ есть встроенный класс с именем NSURLComponents, который может автоматически анализировать параметры запроса для вас (NSURLComponents доступен в iOS 7+, но функция разбора параметров запроса отсутствует).

3 голосов
/ 19 декабря 2014

Попробуйте это

NSArray * foo = [@ "10/04/2011" componentsSeparatedByString: @ "/"];

NSString * day = [foo objectAtIndex: 0];

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...