`

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 Tcp 客户端工具类 java Tcp 客户端工具类

    java Tcp 客户端工具类 java Tcp 客户端工具类java Tcp 客户端工具类 java Tcp 客户端工具类java Tcp 客户端工具类 java Tcp 客户端工具类java Tcp 客户端工具类 java Tcp 客户端工具类java Tcp 客户端工具类 java ...

    Java实现url加密处理的方法示例

    Java中的URL加密处理是网络安全传输数据的一个重要环节,它可以防止敏感信息在传输过程中被窃取或篡改。本文将深入探讨如何使用Java实现URL加密,特别是基于Base64编码和编码转换的方式。我们将重点关注以下几个方面...

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

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

    30个java工具类

    [工具类] CookieCounter .java.txt [工具类] 验证码img .jsp.txt [工具类] Java中计算任意两个日期之间的工作天数 .java.txt [工具类] java抓取网页 .java.txt [工具类] MD5 .java.txt [工具类] MD5强化版 .java.txt...

    Https请求工具类,Java实现http请求,https请求

    Https请求工具类,Java实现http请求,https请求 本篇文章将详细介绍如何使用Java语言实现Http和Https请求的工具类,包括如何建立Https...该工具类可以用于各种Java应用程序中,例如Web应用程序、移动应用程序等。

    URL转换为PDF的Java实现

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

    java短链接生成.zip

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

    jedisUtil工具类java

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

    Java连接数据库的工具类

    本资源是java开发的常用工具类,包括01.DTD约束文档,02.Schema约束文档,c3p0,commons-dbutils-1.6,commons-io-2.4,commons-pool-1.5.6,mysql-connector-java-5.1.37

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

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

    图片水印添加工具类 ImageRemark.java

    图片水印添加工具类 ImageRemark.java,可以添加文字水印,图片水印,定制化参数,可以满足各种图片水印的添加

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

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

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

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

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

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

    Java生成订单号的工具类

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

    Java工具类

    本资源提供的五个Java工具类涵盖了日期时间处理、数字格式化、参数操作、字符串操作以及数据校验等多个方面,这对于开发人员来说是非常实用的。下面我们将对每个工具类进行详细解释。 1. **日期时间工具类**: 这...

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

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

Global site tag (gtag.js) - Google Analytics