`

Java URL链接动态添加参数,Java URL链接删除参数,UrlUtils链接参数工具类

阅读更多

 

 

=======================

©Copyright 蕃薯耀 2021-01-22

http://fanshuyao.iteye.com/

 

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
  
public class UrlUtils {  
	
	private static Logger log = Logger.getLogger(UrlUtils.class);
	
	public static final String QUESTION_MARK = "?";
	public static final String AND_MARK = "&";
	public static final String EQUAL_MARK = "=";
	
	
	/**
     * 获取链接的参数
     * @param url 链接
     * @return
     */
    public static LinkedHashMap<String, String> getParamsMap(String url){
    	log.info("url=" + url);
    	
    	if(StringUtils.isBlank(url)){  
            return null;  
        }
    	
    	url = url.trim();
    	int length = url.length();  
        int index = url.indexOf(QUESTION_MARK); 
        
        if(index > -1){//url说明有问号  
            if((length - 1) == index){//url最后一个符号为?,如:http://wwww.baidu.com?  
                return null;  
                
            }else{
            	//情况为:http://wwww.baidu.com?aa=11或http://wwww.baidu.com?aa=或http://wwww.baidu.com?aa  
                String baseUrl = url.substring(0, index);
                String paramsString = url.substring(index + 1);
                
                log.info("baseUrl=" + baseUrl);
                log.info("paramsString=" + paramsString);
                
                if(!StringUtils.isBlank(paramsString)){
                	LinkedHashMap<String, String> paramsMap = new LinkedHashMap<String, String>(); 
                	String[] params = paramsString.split(AND_MARK); 
                    
                    for (String param : params) {  
                        if(!StringUtils.isBlank(param)){  
                            String[] oneParam = param.split(EQUAL_MARK);  
                            String paramName = oneParam[0]; 
                            
                            if(!StringUtils.isBlank(paramName)){
                            	if(oneParam.length > 1){
                                	paramsMap.put(paramName.trim(), oneParam[1]);//键可以去空格,值不能去空格
                                	
                                }else{
                                	paramsMap.put(paramName.trim(), "");
                                }
                            }
                            
                        }  
                    }
                    return paramsMap;
                }
            }  
        }
    	
    	return null;
    }
    
    
    /** 
     * 向url链接追加参数(会覆盖已经有的参数)
     * @param url 链接地址
     * @param params LinkedHashMap<String, String> 参数
     * @param isOverride 是否覆盖参数,true表示将新参数覆盖链接原参数,false不覆盖
     * @return 
     */  
    public static String addParams(String url, LinkedHashMap<String, String> params, boolean isOverride){  
        if(StringUtils.isBlank(url)){  
            return "";  
            
        }else if(params == null || params.size() < 1){  
            return url.trim();
            
        }else{
        	
            url = url.trim();  
            int index = url.indexOf(QUESTION_MARK);
            String baseUrl = "";
            
            if(index > -1){
            	baseUrl = url.substring(0, index);
            	
            }else{
            	baseUrl = url;
            }
            
            LinkedHashMap<String, String> paramsMapInUrl = getParamsMap(url);
            
            if(paramsMapInUrl == null){
            	paramsMapInUrl = new LinkedHashMap<String, String>();
            }
            
            if(!isOverride){
            	//移除Url链接已经存在的参数
        		LinkedHashMap<String, String> newParams = new LinkedHashMap<String, String>(params.size());
        		
        		for (Map.Entry<String, String> entry : params.entrySet()) {
        			if(!StringUtils.isBlank(entry.getKey())){
        				newParams.put(entry.getKey().trim(), entry.getValue());
    				}
        		}
        		
    			for (Map.Entry<String, String> entry : newParams.entrySet()) {
    				for (Map.Entry<String, String> urlEntry : paramsMapInUrl.entrySet()) {
    					if(!StringUtils.isBlank(entry.getKey())){
    						if(entry.getKey().trim().equals(urlEntry.getKey())){
    							params.remove(entry.getKey().trim());
    		    			}
    					}
    	    		}
        		}
            }
            
        	
    		for (Map.Entry<String, String> entry : params.entrySet()) {
    			paramsMapInUrl.put(entry.getKey().trim(), entry.getValue());
			}
        	
        	//重新拼接链接
            if(paramsMapInUrl != null && paramsMapInUrl.size() > 0){
                StringBuffer paramBuffer = new StringBuffer(baseUrl);  
                paramBuffer.append(QUESTION_MARK);  
                Set<String> set = paramsMapInUrl.keySet();  
                for (String paramName : set) {  
                    paramBuffer.append(paramName).append(EQUAL_MARK)
                    .append(paramsMapInUrl.get(paramName) == null ? "" : paramsMapInUrl.get(paramName))
                    .append(AND_MARK);  
                }  
                paramBuffer.deleteCharAt(paramBuffer.length() - 1);  
                return paramBuffer.toString();  
            }  
            return baseUrl;
              
        }  
    }
    
    
    /** 
     * 向url链接追加参数(单个) (会覆盖已经有的参数)
     * @param url 链接地址
     * @param name String 参数名
     * @param value String 参数值
     * @param isOverride 是否覆盖参数,true表示将新参数覆盖链接原参数,false不覆盖
     * @return 
     */  
    public static String addParam(String url, String name, String value, boolean isOverride){  
        if(StringUtils.isBlank(url)){  
            return "";  
            
        }else if(StringUtils.isBlank(name)){  
            return url.trim(); 
            
        }else{  
        	LinkedHashMap<String, String> params = new LinkedHashMap<String, String>();  
            params.put(name.trim(), value);  
            return addParams(url, params, isOverride);  
        }  
    }
    
    
    /** 
     * 向url链接追加参数(单个) (会覆盖已经有的参数)
     * @param url 链接地址
     * @param name String 参数名
     * @param value String 参数值
     * @return 
     */  
    public static String addParam(String url, String name, String value){  
    	return addParam(url, name, value, true); 
    }
    
    
    /** 
     * 向url链接追加参数(单个) (不会覆盖已经有的参数)
     * @param url 链接地址
     * @param name String 参数名
     * @param value String 参数值
     * @return 
     */  
    public static String addParamNotExist(String url, String name, String value){  
    	return addParam(url, name, value, false);
    }
    
    
    /** 
     * 向url链接追加参数(会覆盖已经有的参数)
     * @param url 链接地址
     * @param params LinkedHashMap<String, String> 参数
     * @return 
     */  
    public static String addParams(String url, LinkedHashMap<String, String> params){  
    	return addParams(url, params, true);
    }
    
    
    /** 
     * 向url链接追加参数(不会覆盖已经有的参数)
     * @param url 链接地址
     * @param params LinkedHashMap<String, String> 参数
     * @return 
     */  
    public static String addParamsNotExist(String url, LinkedHashMap<String, String> params){  
    	return addParams(url, params, false);
    }
    
      
    /** 
     * 移除url链接的多个参数 
     * @param url String 链接地址
     * @param paramNames String... 参数
     * @return 
     */  
    public static String removeParams(String url, String... paramNames){  
        if(StringUtils.isBlank(url)){  
            return "";  
            
        }else if(paramNames == null || paramNames.length < 1){  
            return url.trim(); 
            
        }else{
            url = url.trim();
            int length = url.length();  
            int index = url.indexOf(QUESTION_MARK);
            
            
            if(index > -1){//url有问号
            	
                if((length - 1) == index){//url最后一个符号为?,如:http://wwww.baidu.com?  
                    return url;  
                    
                }else{
                	LinkedHashMap<String, String> paramsMap = getParamsMap(url);
                	
                	//删除参数
                	if(paramsMap != null && paramsMap.size() > 0){
                		for (String paramName : paramNames) {
                			if(!StringUtils.isBlank(paramName)){
                				paramsMap.remove(paramName.trim());
                			}
						}
                	}
                	
                	String baseUrl = url.substring(0, index);
                	
                	//重新拼接链接
                    if(paramsMap != null && paramsMap.size() > 0){
                        StringBuffer paramBuffer = new StringBuffer(baseUrl);  
                        paramBuffer.append(QUESTION_MARK);  
                        Set<String> set = paramsMap.keySet();  
                        for (String paramName : set) {  
                            paramBuffer.append(paramName).append(EQUAL_MARK).append(paramsMap.get(paramName)).append(AND_MARK);  
                        }  
                        paramBuffer.deleteCharAt(paramBuffer.length() - 1);  
                        return paramBuffer.toString();  
                    }  
                    return baseUrl; 
                }  
            } 
            return url;  
        }  
    }
    
    
      
    public static void main(String[] args) {
    	/*
        String a = "http://wwww.baidu.com"; 
        String b = "http://wwww.baidu.com?"; 
        String c = "http://wwww.baidu.com?aa=11";
        String d = "http://wwww.baidu.com?aa";  
        String e = "http://wwww.baidu.com?aa=11&bb=222&cc=33";  
        String f = "http://wwww.baidu.com?aa=11&bb=222&cc=33&dd=";  
        String g = "http://wwww.baidu.com?aa=111&bb=222&cc=33&dd"; 
        */
        
        /*
        List<String> params = new ArrayList<String>(); 
        params.add("aa"); 
        System.out.println("d="+removeParams(d, params)); 
        params.add("bb"); 
        System.out.println("e="+removeParams(e, params)); 
        params.add("cc"); 
        System.out.println("f="+removeParams(f, params)); 
        params.add("dd"); 
        System.out.println("g="+removeParams(g, params));
        */  
        
        /*
        System.out.println("g="+removeParams(g, "cc","aa","dd"));
        System.out.println("g2="+removeParams(g, "cc","aa","dd"));
        System.out.println("d="+removeParams(d, "cc"));
        System.out.println("d2="+removeParams(d, "aa"));
        System.out.println("a="+removeParams(a, "aa"));
        System.out.println("b="+removeParams(b, "aa"));
        */
        
        /*
        System.out.println("a==="+addParam(a, "p", "cc"));
        System.out.println("b==="+addParam(b, "p", "cc"));
        System.out.println("c==="+addParam(c, "p", "cc"));
        System.out.println("d==="+addParam(d, "p", "cc"));
        */
        
    	/*
        System.out.println("g1==="+addParam(g, "bb", "000"));
        System.out.println("g2==="+addParamNotExist(g, "bb", "000"));
        */
        
        /*
        LinkedHashMap<String, String> paramsMap = new LinkedHashMap<String, String>();
        paramsMap.put("jj", "j13");
        paramsMap.put("kkk", "k1243");
        paramsMap.put("mm", "");
        paramsMap.put("nn", null);
        paramsMap.put("bb", "new");
        
        //System.out.println("a==="+addParams(a, paramsMap));
        //System.out.println("b==="+addParams(b, paramsMap));
        //System.out.println("c==="+addParams(c, paramsMap));
        //System.out.println("d==="+addParams(d, paramsMap));
        
        System.out.println("f1==="+addParams(f, paramsMap));
        System.out.println("f2==="+addParamsNotExist(f, paramsMap));
        */
        
        
        //System.out.println("g2="+getParamsMap(g)); 
    }
    
}


 

 

=======================

©Copyright 蕃薯耀 2021-01-22

http://fanshuyao.iteye.com/

1
1
分享到:
评论

相关推荐

    URLEncodedUtils.java 获取Url中的字段value值

    Apache 官方 URLEncodedUtils.java 工具类,可以用来获取Url中的字段value值

    java调用动态链接库实例 java调用动态链接库实例 java调用动态链接库实例

    在Java编程中,有时我们需要利用已有的C或C++库,这些库通常以动态链接库(Dynamic Link Library, DLL在Windows上,Shared Object, SO在Linux上)的形式存在。Java本身并不直接支持调用原生代码,但它通过Java ...

    Rabbitmq工具类,java工具类RabbitmqUtil

    `RabbitmqUtil` 是一个专门为Java开发者设计的工具类,简化了与RabbitMQ交互的复杂过程,使得开发者能够更快速、更方便地发送和接收消息。 首先,我们来详细了解一下`RabbitmqUtil`工具类的主要功能: 1. **连接...

    Java如何实现URL带请求参数(get/post)及得到get和post请求url和参数列表的方法

    总结来说,Java中处理URL带请求参数(GET/POST)主要依赖`java.net`包下的类进行网络通信,而在Servlet环境中,通过`HttpServletRequest`提供的方法可以方便地获取请求的URL和参数。在实际应用中,这些基础知识对于...

    java短链接生成.zip

    这个名为"java短链接生成.zip"的压缩包文件提供了一个基于SpringBoot框架的Java实现,用于生成短链接。让我们深入探讨一下这个项目的核心知识点,以及如何利用它来创建和管理短链接。 首先,我们要了解SpringBoot。...

    jedisUtil工具类java

    jedis的工具类,java代码写的,非常全面,jedis的工具类,java代码写的,非常全面jedis的工具类,java代码写的,非常全面jedis的工具类,java代码写的,非常全面jedis的工具类,java代码写的,非常全面jedis的工具类...

    JAVA 根据Url 接口 获取文件名称和类型

    JAVA 根据Url 接口 获取文件名称和类型,亲测可用。输入参数地址即可。

    Java中实现参数名ASCII码从小到大排序(字典序).doc

    在Java编程中,有时我们需要对一组参数按照字典顺序(ASCII码值从小到大)进行排序,例如在创建签名或构建URL查询字符串时。这里提供了一个名为`createSign`的方法,它接受一个`Map, Object&gt;`类型的参数,并返回一个...

    Java解析wsdl文档获取具体的方法与参数

    总结,Java解析WSDL文档获取具体的方法与参数涉及的主要知识点包括:XML解析(DOM)、JAX-WS框架、`javax.xml.ws.Service`类的使用,以及如何基于WSDL生成服务客户端代码。理解这些概念,将有助于开发和消费Web服务...

    java判断参数是否为空工具类 java判断对象属性是否全部为空

    java判空工具类 可以判断字符串数组,字符串类型,List对象集合,Map集合map,object&gt;,map和多个String参数,对象类型,是否为空。 java判断对象属性是否全部为空,只要有一个属性不为空,那么就不是所有的属性值都...

    通过url获取网络位置上的文件流

    8. **封装工具类**:为了代码的可重用性和可维护性,可以将上述步骤封装成一个工具类方法,接受URL作为参数,返回文件流或处理后的结果。这样,在需要下载文件的地方,只需调用这个工具类即可。 在提供的压缩包文件...

    java程序中加载动态链接库文件

    ### Java程序中加载动态链接库文件 #### 一、引言 在开发Java应用程序时,有时需要调用一些底层硬件接口或执行特定平台的操作,这些功能通常无法仅通过纯Java代码实现。这时,就需要借助于Java Native Interface ...

    Java生成订单号的工具类

    该工具类是Java编写下载即可使用,该工具类中有生成各种长度的订单号,有英文数字混合的,有数字的

    java使用HttpClient通过url下载文件到本地

    - **构建HttpGet请求**:使用`HttpGet`类创建一个HTTP GET请求,指定要下载的URL作为参数。 - **设置请求头**(可选):如果URL需要身份验证或其他特定头信息,可以通过`setHeader()`方法添加。 - **执行请求**:...

    java获取百度网盘真实下载链接的方法

    在实际操作中,可能会遇到反爬虫策略,比如动态加载、JavaScript加密等,这时可能需要使用更复杂的工具,如Selenium或Puppeteer来模拟浏览器行为,或者利用浏览器插件如Postman来调试请求,以便找出正确构造请求的...

    使用Java处理磁力链接

    java磁力链接,本文包含概念及实例代码

    Java微信长链接转短链接

    使用微信接口制作的转短链接工具,需要有自己的微信测试号或者公众号生成的accesstoken,配置jdk环境变量才能使用(由于使用了exe4j打包,提示配置EXE_JAVA_HOME是和jdk环境变量一样的配置方法)

    filter对request请求拦截,对请求参数进行修改

    此工具可以对参数拦截并转义后提交到对应的处理类。 除了添加两个JsFilter.java和GetHttpServletRequestWrapper.java之外,需要在web.xml添加对应的配置。 &lt;!-- 特殊字符过滤 --&gt; &lt;filter-name&gt;sqlFilter ...

    java调用C++动态链接库dll接口

    本项目涉及的"java调用C++动态链接库dll接口"是解决这种跨语言交互问题的一种方法,主要利用了Java Native Interface(JNA)这一技术。 JNA是Java平台的标准库,它允许Java代码直接调用本机库(如DLL或.so文件)的...

    java信任SSL证书的工具类

    java信任SSL证书的工具类 忽略HTTPS请求的SSL证书,必须在openConnection之前调用

Global site tag (gtag.js) - Google Analytics