iOS开发:URL中的参数截取方法

以简书的这个url为例:

http://www.jianshu.com/search?q=ios%E7%BD%91%E7%BB%9C%E8%AF%AD%E9%9F%B3%E6%92%AD%E6%94%BE&page=1&type=notes

“?”后面的是参数,多个参数使用“&”连接。每一组参数有一个key和一个value,用“=”相连。比如:

q=ios%E7%BD%91%E7%BB%9C%E8%AF%AD%E9%9F%B3%E6%92%AD%E6%94%BE

page=1

type=notes

思路:根据url的命名规则,通过“?”“&”“=”识别出参数,通过字符串截取方法,快速的把url中的parameters截取下来。

主要方法(函数)1:NSRange range =  [Astring  rangeOfString:Bstring];

      NSRange 由 location 和 length 组成.

使用这个方法可以找出?在url中位置:range.location,range.length = 1;

主要方法(函数)2:NSString*parametersString = [url  substringFromIndex:range.location+1];

用这个方法,截取出所有参数:q=ios%E7%BD%91%E7%BB%9C%E8%AF%AD%E9%9F%B3%E6%92%AD%E6%94%BE&page=1&type=notes。

主要方法(函数)3:[parametersString   containsString:@"&"]
通过判断参数中是否包含“&”符号,来识别url中是一个参数还是两个以上参数。返回值是BOOL。

主要方法4:[parametersString   componentsSeparatedByString:@"&"],返回值是一个数组。

通过“&”符号把每一个参数分开,存入数组中。

[parametersString  componentsSeparatedByString:@"="];

通过“=”符号把每一个参数中的key和value分开,存入数组中。

主要方法6:NSString*key = [pairComponents.firstObject  stringByRemovingPercentEncoding];

NSString*value = [pairComponents.lastObjectstringByRemovingPercentEncoding]

将参数中的key和value转化为字符串。

主要方法就这些。加一些循环和判断。就可以写出来。我的做法是,写一个NSString的分类。在分类中实现此方法。以后直接调用就可以。

以下就是完整代码:

-(NSMutableDictionary*)getURLParameters {

NSRange  range = [self  rangeOfString:@"?"];

if(range.location==NSNotFound) {

return  nil;

}

NSMutableDictionary  *params = [NSMutableDictionary   dictionary];

NSString  *parametersString = [self    substringFromIndex:range.location+1];

if([parametersString   containsString:@"&"]) {

NSArray  *urlComponents = [parametersString   componentsSeparatedByString:@"&"];

for(NSString *keyValuePair in urlComponents) {

//生成key/value

NSArray *pairComponents = [keyValuePair  componentsSeparatedByString:@"="];

NSString *key = [pairComponents.firstObject  stringByRemovingPercentEncoding];

NSString*value = [pairComponents.lastObject  stringByRemovingPercentEncoding];

//key不能为nil

if(key==nil|| value ==nil) {

continue;

}

id existValue = [params valueForKey:key];

if(existValue !=nil) {

//已存在的值,生成数组。

if([existValue  isKindOfClass:[NSArray  class]]) {

//已存在的值生成数组

NSMutableArray*items = [NSMutableArray arrayWithArray:existValue];

[items addObject:value];

[params setValue:items forKey:key];

}else{

//非数组

[params setValue:@[existValue,value]forKey:key];

}

}else{

//设置值

[params setValue:value forKey:key];

}

}

}else{

//单个参数生成key/value

NSArray *pairComponents = [parametersString  componentsSeparatedByString:@"="];

if(pairComponents.count==1) {

return nil;

}

//分隔值

NSString *key = [pairComponents.firstObject  stringByRemovingPercentEncoding];

NSString *value = [pairComponents.lastObject  stringByRemovingPercentEncoding];

//key不能为nil

if(key ==nil|| value ==nil) {

return nil; 

}

//设置值

[params setValue:value forKey:key];

}

return params;

}

代码中一些KVC的方法和数组中添加对象,addObject,isKindOfClass的方法就不一一解释了。

截取的方法有很多,这里只提供一个参考。欢迎大家集思广益,共同进步。

如发现问题,请在评论区指出。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容