在应用开发中有时会遇到从URL提取键值对的问题。比如从“http://www.google.com.hk/?hl=en&safe=active&biw=1680&bih=820&q=iPhone&aq=f&aqi=g10&aql=&oq=&fp=1d3bf50ad4aa3fea”获取biw或者q的值各是什么。如果只是某一个地方使用到可以“就地解决”,但如果频繁使用到就需要将这样的实现提取的同一的地方以便不同情况下调用。对于这种功能,NSString和NSDictionary就是比较合适的归属,为此我们可以通过Category对NSString进行扩展,实现代码如下:
@interface NSString(KVPair)
- (NSDictionary *)parametersWithSeparator:(NSString *)separator delimiter:(NSString *)delimiter;
@end
@implementation NSString(KVPair)
- (NSDictionary *)parametersWithSeparator:(NSString *)separator delimiter:(NSString *)delimiter {
NSArray *parameterPairs = [self componentsSeparatedByString:delimiter];
NSMutableDictionary *parameters = [NSMutableDictionary dictionaryWithCapacity:[parameterPairs count]];
for (NSString *currentPair in parameterPairs) {
NSRange range = [currentPair rangeOfString:separator];
if(range.location == NSNotFound)
continue;
NSString *key = [currentPair substringToIndex:range.location];
NSString *value =[currentPair substringFromIndex:range.location + 1];
[parameters setObject:value forKey:key];
}
return parameters;
}
@end
通过如下代码就可以解析出指定字符串中包括的键值对了。
NSString *rawString = @"hl=en&safe=active&biw=1680&bih=820&q=iPhone&aq=f&aqi=g10&aql=&oq=&fp=1d3bf50ad4aa3fea";
NSDictionary *kvPairs = [rawString parametersWithSeparator:@"=" delimiter:@"&"];
本文出自 “林家男孩” 博客,请务必保留此出处http://bj007.blog.51cto.com/1701577/539018