iOSが開発した分離URLのパラメータ
4851 ワード
開発中にページをジャンプするときにバックグラウンドから戻ってきたサイトを処理する必要がある場合があります.たとえば、特定のパラメータを抽出したり、削除したりします.文字列にこのパラメータが含まれているかどうかを直接判断すると、パラメータの長さは制御しにくい.そこで私はアルゴリズムを実現し、合法的なurl(最初のパラメータは「?」接続され、urlには「?」が1つしかありません.残りのパラメータは「&」接続)で文字列分割などの処理を行い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(@"%@
",[AppDelegate getParamsWithUrlString:str1]);
NSLog(@"%@
",[AppDelegate getParamsWithUrlString:str2]);
NSLog(@"%@
",[AppDelegate getParamsWithUrlString:str3]);
NSLog(@"%@
",[AppDelegate getParamsWithUrlString:str4]);
NSLog(@"%@
",[AppDelegate getParamsWithUrlString:str5]);
NSLog(@"%@
",[AppDelegate getParamsWithUrlString:str6]);
NSLog(@"%@
",[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;
}
)