`

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
分享到:
评论

相关推荐

    Java校验参数工具类

    这是自己开发的一个参数校验的工具类,可用于对实例的属性进行非空校验。包括全部校验和任一校验两种校验方式。 举例:CheckParamsUtils.checkParamsAll(requestBean, "name", "age","gender");

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

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

    java 验证码工具类 java 验证码工具类 java 验证码工具类

    java 验证码工具类 java 验证码工具类 java 验证码工具类java 验证码工具类 java 验证码工具类 java 验证码工具类java 验证码工具类 java 验证码工具类 java 验证码工具类java 验证码工具类 java 验证码工具类 java ...

    java 文件上传工具类 java 文件上传工具类

    java 文件上传工具类 java 文件上传工具类java 文件上传工具类 java 文件上传工具类java 文件上传工具类 java 文件上传工具类java 文件上传工具类 java 文件上传工具类java 文件上传工具类 java 文件上传工具类java ...

    URL转换为PDF的Java实现

    在这个例子中,我们需要先下载并配置ChromeDriver,然后创建一个ChromeOptions对象,添加Headless模式和其他参数。之后,启动一个新的ChromeDriver实例,导航到目标URL,等待页面加载,然后执行JavaScript的`window....

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

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

    Java MD5加密工具类(支持多参数输入)

    Java工具类,它不仅实现了MD5加密,更创新性地接纳String... inputStrs,让你能一次性加密多个字符串。 1. 一键加密,多值无忧 告别繁杂,拥抱简洁。我们的Java MD5加密工具类以String... inputStrs为武器,打破了...

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

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

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

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

    JAVA线程根据给定URL生成网页快照

    在Java中,可以使用`java.net.URL`和`java.net.HttpURLConnection`类来发起HTTP请求。例如,我们可以创建一个`URL`对象并打开到该URL的连接,然后读取响应的输入流来获取HTML内容: ```java URL url = new URL(...

    动态拼接sql语句工具类,拼接where后面语句

    动态拼接sql语句工具类,拼接where后面语句 配合原生jdbc仿动态sql注入 if (ObjectUtil.isNotEmpty(maxLat)&&ObjectUtil.isNotEmpty(minLat)){ sqlParamList.add(new SqlParam("lat",minLat, SqlOpEnum.GE)); ...

    Java生成订单号的工具类

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

    使用Java处理磁力链接

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

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

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

    java信任SSL证书的工具类

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

    java操作sqlite数据库工具代码及jar包

    接下来,工具类是预编写好的Java代码,通常包含了一系列静态方法,用于简化数据库操作。这些方法可能包括连接数据库、执行SQL查询、插入、更新和删除数据等。例如,一个简单的工具类可能包含以下方法: ```java ...

    Java工具类之Apache的Commons Lang和BeanUtils

    Java工具类是开发过程中不可或缺的一部分,它们提供了许多实用的功能,帮助开发者提高代码的效率和可维护性。Apache Commons Lang和BeanUtils是两个非常著名的Java工具库,由Apache软件基金会开发和维护。这两个库...

    java实现对象转化为get请求的param参数String字符串

    java实现对象转化为get请求的param参数String字符串,本人自测非常好用,一般对象可以转化键值对的格式,但是最近项目需要自己手动拼接对象作为get请求的参数,百度了一堆还不如自己写一个,欢迎各位使用,有什么...

    批量url链接生成工具

    3. **多样性**:工具可能包含随机化的元素,如动态变化的URL参数,以增加链接的多样性,避免被搜索引擎视为重复或垃圾链接。 4. **安全性**:在生成链接时,工具应考虑遵循搜索引擎的规则,避免使用被视为黑帽SEO的...

    java对图片添加水印的工具类

    添加文字水印的工具类,自己去下JAR包,MAVEN的网站http://mvnrepository.com/

Global site tag (gtag.js) - Google Analytics