url链接拆解/分析/分解/解剖/提取/...?

##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非法");
		}
		
		
		
	}

}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值