##url链接拆解/分析/分解/解剖/提取/…?
场景:在某个请求中,需要使用到一个参数,但目前server端只能给到一个链接,且需要的参数就在其中,暂时也不单独提供该参数,那么就从url中提取吧。
暂时就这么写来实现功能,优化该功能待完善
。
先看下执行效果
url拆解成两个串:
https://tswes.suff.xrd.com/h5i/home/paperDeul.html
accTok=b21f-df23-4f65-9377-0824c&paId=56E5-4055-4719-AE73-3E47&subID=08A2-E15D-46F4-86EC-F23E&tId=2A64-552B-4FEB-BCED-51C3
# false
参数分解结果:
key:tId value:2A64-552B-4FEB-BCED-51C3
key:subID value:08A2-E15D-46F4-86EC-F23E
key:paId value:56E5-4055-4719-AE73-3E47
key:accTok value:b21f-df23-4f65-9377-0824c
获取 其中一个以'paId'为key对应的值:56E5-4055-4719-AE73-3E47
接着放点代码充字数:
package com.testy.utils;
import java.util.HashMap;
import java.util.Map;
/**
* Url拆解
* @author s
*
*/
public class UrlDissect {
/**
* 将url拆解成问号分隔的两部分用来进行操作
* @param url
* @return url和params的数组,使用时候需要判断是否为null对象
*/
public static String[] getUrlAndParams(String url){
// 链接中仅允许存在一个问号,可拆解为2个串
String[] urlAndParams = new String[2];
if(url != null && url.contains("?")){
urlAndParams = url.trim().split("[?]");
}
return urlAndParams;
}
/**
* 根据传参的url参数字串分解组装成map进行使用
* @param paramsStr
* @return
*/
public static Map<String,String> getUrlParams(String paramsStr){
Map<String, String> mapParams = new HashMap<String, String>();
if(paramsStr == null){
return mapParams;
}
String[] paramsArr = paramsStr.split("[&]");
// 多个参数的
if(paramsArr != null && paramsArr.length > 0){
for (String string : paramsArr) {
String[] kvParams = string.split("[=]");
// 分解键值
if(kvParams != null && kvParams.length > 1){
mapParams.put(kvParams[0], kvParams[1]);
}else{
// 只有参数没有值
if(!"".equals(kvParams[0])){
mapParams.put(kvParams[0], "");
}
// 有值没参数,非法,暂不做处理
}
}
}
return mapParams;
}
/**
* 根据标识key,返回值value
* @param map
* @param flag
* @return
* @throws Exception
*/
public static String getFieldValue(Map<String,String> map,String flag) throws Exception{
String paperId = null;
for (String keyIn : map.keySet()) {
if(keyIn.equalsIgnoreCase(flag)){
// 这里将equals改为equalsIgnoreCase,因具体使用中服务端的大小写不可控
paperId = map.get(keyIn);
break;
}
}
return paperId;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String linkA = "https://tswes.suff.xrd.com/h5i/home/paperDeul.html?accTok=b21f-df23-4f65-9377-0824c&paId=56E5-4055-4719-AE73-3E47&subID=08A2-E15D-46F4-86EC-F23E&tId=2A64-552B-4FEB-BCED-51C3";
String linkB = "a.html?asdf=value";
String[] urlAndParams = UrlDissect.getUrlAndParams(linkB);
if(urlAndParams != null && urlAndParams.length > 1){
System.out.println("url拆解成两个串:\r\n" + urlAndParams[0] + " \r\n" + urlAndParams[1] + " \r\n# " + (urlAndParams[1] == null));
Map<String, String> map = getUrlParams(urlAndParams[1]);
String params = "";
for (String key : map.keySet()) {
String value = map.get(key);
params += ("\r\nkey:" + key + "\t value:" + value);
}
System.out.println("参数分解结果:" + params);
try {
String paperId = getFieldValue(map, "paId");
System.out.println("获取 其中一个以'paId'为key对应的值:" + paperId);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{
System.out.println("Url非法");
}
}
}