iOS开发之分离URL中的参数

开发中有时候在跳转网页的时候可能需要对后台返回的网址做一些处理。如提取某些参数或删除某些参数。如果直接判断字符串中是否包含该参数,但是参数的长度又不好控制。因此我实现了一个算法,通过对一个合法的url(第一个参数用"?"连接,且url中只有一个"?",剩下的参数用"&"连接)进行字符串分割等处理实现了url中参数的提取。

算法如下。


/**

 获取url中的参数并返回



 @param urlString 带参数的url

 @return @[NSString:无参数url, NSDictionary:参数字典]

 */

+ (NSArray*)getParamsWithUrlString:(NSString*)urlString {

    if(urlString.length==0) {

        NSLog(@"链接为空!");

        return @[@"",@{}];

    }



    //先截取问号

    NSArray*allElements = [urlStringcomponentsSeparatedByString:@"?"];

    NSMutableDictionary *params = [NSMutableDictionary dictionary];//待set的参数字典



    if(allElements.count==2) {

        //有参数或者?后面为空

        NSString*myUrlString = allElements[0];

        NSString*paramsString = allElements[1];



        //获取参数对

        NSArray*paramsArray = [paramsStringcomponentsSeparatedByString:@"&"];



        if(paramsArray.count>=2) {



            for(NSIntegeri =0; i < paramsArray.count; i++) {



                NSString*singleParamString = paramsArray[i];

                NSArray*singleParamSet = [singleParamStringcomponentsSeparatedByString:@"="];



                if(singleParamSet.count==2) {

                    NSString*key = singleParamSet[0];

                    NSString*value = singleParamSet[1];



                    if(key.length>0|| value.length>0) {

                        [paramssetObject:value.length>0?value:@""forKey:key.length>0?key:@""];

                    }

                }

            }

        }elseif(paramsArray.count==1) {

            //无 &。url只有?后一个参数

            NSString*singleParamString = paramsArray[0];

            NSArray*singleParamSet = [singleParamStringcomponentsSeparatedByString:@"="];



            if(singleParamSet.count==2) {

                NSString*key = singleParamSet[0];

                NSString*value = singleParamSet[1];



                if(key.length>0|| value.length>0) {

                    [paramssetObject:value.length>0?value:@""forKey:key.length>0?key:@""];

                }

            }else{

                //问号后面啥也没有 xxxx?  无需处理

            }

        }



        //整合url及参数

        return@[myUrlString,params];

    }elseif(allElements.count>2) {

        NSLog(@"链接不合法!链接包含多个\"?\"");

        return @[@"",@{}];

    }else{

        NSLog(@"链接不包含参数!");

        return@[urlString,@{}];

    }



}

测试用例

NSString *str1 = @"https://www.jd.com/";
NSString *str2 = @"https://www.jd.com/?";
NSString *str3 = @"https://www.jd.com/?device=app";
NSString *str4 = @"https://www.jd.com/?device=app&appVersion=1.0.7&";
NSString *str5 = @"https://www.jd.com/?device=app&appVersion=1.0.7&platform=";
NSString *str6 = @"https://www.jd.com/?device=app&appVersion=&platform=iOS";
NSString *str7 = @"https://www.jd.com/?device=app&appVersion=1.0.7&platform=iOS";
    
NSLog(@"%@\n",[AppDelegate getParamsWithUrlString:str1]);
NSLog(@"%@\n",[AppDelegate getParamsWithUrlString:str2]);
NSLog(@"%@\n",[AppDelegate getParamsWithUrlString:str3]);
NSLog(@"%@\n",[AppDelegate getParamsWithUrlString:str4]);
NSLog(@"%@\n",[AppDelegate getParamsWithUrlString:str5]);
NSLog(@"%@\n",[AppDelegate getParamsWithUrlString:str6]);
NSLog(@"%@\n",[AppDelegate getParamsWithUrlString:str7]);

打印结果

2018-02-02 09:56:53.316819+0800 环形渐变测试[1572:274749] 链接不包含参数!
2018-02-02 09:56:53.316978+0800 环形渐变测试[1572:274749] (
    "https://www.jd.com/",
        {
    }
)
2018-02-02 09:56:53.317134+0800 环形渐变测试[1572:274749] (
    "https://www.jd.com/",
        {
    }
)
2018-02-02 09:56:53.317329+0800 环形渐变测试[1572:274749] (
    "https://www.jd.com/",
        {
        device = app;
    }
)
2018-02-02 09:56:53.317457+0800 环形渐变测试[1572:274749] (
    "https://www.jd.com/",
        {
        appVersion = "1.0.7";
        device = app;
    }
)
2018-02-02 09:56:53.317586+0800 环形渐变测试[1572:274749] (
    "https://www.jd.com/",
        {
        appVersion = "1.0.7";
        device = app;
        platform = "";
    }
)
2018-02-02 09:56:53.317690+0800 环形渐变测试[1572:274749] (
    "https://www.jd.com/",
        {
        appVersion = "";
        device = app;
        platform = iOS;
    }
)
2018-02-02 09:56:53.317771+0800 环形渐变测试[1572:274749] (
    "https://www.jd.com/",
        {
        appVersion = "1.0.7";
        device = app;
        platform = iOS;
    }
)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,579评论 18 139
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,849评论 6 13
  • 现在洁面产品不断推陈出新,好多洁面产品成分真的是五花八门,你有够了解这些成分的意义吗,洗脸也是要对症下药的哦。 沙...
    稻子会开阅读 274评论 0 0
  • 有来有往才是朋友, 有张有驰才是生活。 说得真好。
    乱想胡思阅读 174评论 0 0
  • NSString:不可变字符串 NSMutableString:可变字符串 //c语言中的字符串 char *s ...
    Sunney阅读 570评论 0 0