Objective-C实现将URL参数转换为字典并封装成数组

标签: Objective-C
发布时间: 2014/8/18 11:13:59

代码

首先我们得会一个字符串拆分函数 componentsSeparatedByString:@"&",把字符串按照&进行拆分,然后返回字符串数组

输入的数据的格式如下(装有url的字符串数组):

(
    "http://www.itstrike.cn?a=10&b=20",
    "http://www.itstrike.cn?a=10&b=20&c=30",
    "http://www.itstrike.cn?a=10&c=30"
)

主要代码:

NSMutableArray * dataArray()
{
    //用来作为函数的返回值,数组里里面可以存放每个url转换的字典
    NSMutableArray *arrayData = [NSMutableArray arrayWithCapacity:4];
     
    //获取数组,数组里装得是url
    NSMutableArray *arrayURL = appendURL();
    NSLog(@"获取到得URL数组如下:\n%@", arrayURL);
     
    //循环对数组中的每个url进行处理,把参数转换为字典
    for (int i = 0; i < arrayURL.count; i ++)
    {
        NSLog(@"第%d个URL的处理过程:%@", i+1, arrayURL[i]);
         
        //获取问号的位置,问号后是参数列表
        NSRange range = [arrayURL[i] rangeOfString:@"?"];
        NSLog(@"参数列表开始的位置:%d", (int)range.location);
         
        //获取参数列表
        NSString *propertys = [arrayURL[i] substringFromIndex:(int)(range.location+1)];
        NSLog(@"截取的参数列表:%@", propertys);
         
        //进行字符串的拆分,通过&来拆分,把每个参数分开
        NSArray *subArray = [propertys componentsSeparatedByString:@"&"];
        NSLog(@"把每个参数列表进行拆分,返回为数组:\n%@", subArray);
         
        //把subArray转换为字典
        //tempDic中存放一个URL中转换的键值对
        NSMutableDictionary *tempDic = [NSMutableDictionary dictionaryWithCapacity:4];
         
        for (int j = 0 ; j < subArray.count; j++)
        {
            //在通过=拆分键和值
            NSArray *dicArray = [subArray[j] componentsSeparatedByString:@"="];
            NSLog(@"再把每个参数通过=号进行拆分:\n%@", dicArray);
            //给字典加入元素
            [tempDic setObject:dicArray[1] forKey:dicArray[0]];
        }
        NSLog(@"打印参数列表生成的字典:\n%@", tempDic);
        [arrayData addObject:tempDic];
    }
    NSLog(@"打印参数字典生成的数组:\n%@", arrayData);
     
    return arrayData;
}

说明

1.先把参数列表在url中的参数列表的起始位置获取到,通过方法rangeOfString方法获取

2.位置获取到以后我们可以把参数列表从url字符串中提取出来,通过substringFromIndex来获取。

3.通过componentsSeparatedByString把参数列表进行每项的拆分

4.通过componentsSeparatedByString把每项进行键值对的拆分

5.把键值对存入字典

6.把字典存入数组

官方微信
官方QQ群
31647020