web-dev-qa-db-ja.com

IOS:文字列から部分文字列を取得するNSString

ちょっと私は別の文字列から文字列を抽出する方法を探しています。長さは任意で、文字列の任意の部分にあるため、通常の方法は機能しません。

http://bla.com/bla?id=%1234%&something=%888%

私が抽出したいのは、id =%から次の%までです。

何か案は?

19
Burf2000

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:@""];

PDATE: iOS 8以降では、クエリパラメータを自動的に解析できるNSURLComponentsという組み込みクラスがあります(NSURLComponentsはiOS 7以降で使用できますが、クエリパラメータ解析機能はありません)。

71
Nick Lockwood

これを試して

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

NSString * day = [foo objectAtIndex:0];

3
Suraj K Thomas