URLParser:很实用的URL参数解析器(JAVA代码中方便获取QueryString中的get参数)

Posted 阿奇XS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了URLParser:很实用的URL参数解析器(JAVA代码中方便获取QueryString中的get参数)相关的知识,希望对你有一定的参考价值。

很实用的URL参数解析器(JAVA代码中方便获取QueryString中的get参数)


package com.kaishustory.quick.commons.text;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.io.filefilter.RegexFileFilter;

public class URLParser 
	protected byte type;
	protected static final byte TYPE_URL = 1;
	protected static final byte TYPE_QUERY_STRING = 2;
	protected String url;
	protected String baseUrl;
	protected String queryString;
	protected String label;
	protected String charset = "utf-8";

	protected boolean compiled = false;
	public Map<String, String> parsedParams;
	protected URLDecoder urld = new URLDecoder();

	public static URLParser fromURL(String url) 
		URLParser parser = new URLParser();

		parser.type = 1;
		parser.url = url;

		String[] split = url.split("\\\\?", 2);
		parser.baseUrl = split[0];
		parser.queryString = (split.length > 1 ? split[1] : "");

		String[] split2 = url.split("#", 2);
		parser.label = (split2.length > 1 ? split2[1] : null);

		return parser;
	

	public static URLParser fromQueryString(String queryString) 
		URLParser parser = new URLParser();

		parser.type = 2;
		parser.queryString = queryString;

		return parser;
	

	public URLParser useCharset(String charset) 
		this.charset = charset;
		return this;
	

	public URLParser compile() throws UnsupportedEncodingException 
		if (this.compiled) 
			return this;
		
		String paramString = this.queryString.split("#")[0];
		String[] params = paramString.split("&");

		this.parsedParams = new HashMap<String, String>(params.length);
		for (String p : params) 
			String[] kv = p.split("=");
			if (kv.length == 2) 
				this.parsedParams.put(kv[0], URLDecoder.decode(kv[1], this.charset));
			
		
		this.compiled = true;

		return this;
	

	public String getParameter(String name) 
		if (this.compiled) 
			return (String) this.parsedParams.get(name);
		
		String paramString = this.queryString.split("#")[0];
		Matcher match = Pattern.compile("(^|&)" + name + "=([^&]*)").matcher(paramString);
		match.lookingAt();

		return match.group(2);
	

	public URLParser setParameter(String name, String value) throws UnsupportedEncodingException 
		if (!this.compiled) 
			compile();
		
		this.parsedParams.put(name, value);

		return this;
	

	public String toURL() throws UnsupportedEncodingException 
		if (!this.compiled) 
			compile();
		
		URLBuilder builder = new URLBuilder();

		if (this.type == 1) 
			builder.appendPath(this.baseUrl);
		
		for (String k : this.parsedParams.keySet()) 
			builder.appendParamEncode(k, (String) this.parsedParams.get(k), this.charset);
		
		if (this.label != null) 
			builder.appendLabel(this.label);
		
		return builder.toString();
	

	public static void main(String[] args) 
		try 

			System.err.println(
					fromURL("https://www.google.com/search?q=test&hl=zh_cn&oq=test&gs_l=heirloom-serp.3...38011332.38012012.0.38012235.4.4.0.0.0.0.0.0..0.0.msedr...0...1ac.1.34.heirloom-serp..4.0.0.1q6YK2r8vHI")
							.compile().getParameter("gs_l"));

			System.out.println(
					fromURL("https://www.google.com/search?q=test&hl=zh_cn&oq=test&gs_l=heirloom-serp.3...38011332.38012012.0.38012235.4.4.0.0.0.0.0.0..0.0.msedr...0...1ac.1.34.heirloom-serp..4.0.0.1q6YK2r8vHI")
							.getParameter("q"));

			System.out.println(
					fromURL("https://www.google.com/search?q=test&hl=zh_cn&oq=test&gs_l=heirloom-serp.3...38011332.38012012.0.38012235.4.4.0.0.0.0.0.0..0.0.msedr...0...1ac.1.34.heirloom-serp..4.0.0.1q6YK2r8vHI")
							.compile().getParameter("q"));

			System.out.println(
					fromURL("https://www.google.com/search?q=test&hl=zh_cn&oq=test&gs_l=heirloom-serp.3...38011332.38012012.0.38012235.4.4.0.0.0.0.0.0..0.0.msedr...0...1ac.1.34.heirloom-serp..4.0.0.1q6YK2r8vHI#test-label")
							.compile().setParameter("q", "tweaked").toURL());
		 catch (Exception ex) 
			ex.printStackTrace();
		
	


以上是关于URLParser:很实用的URL参数解析器(JAVA代码中方便获取QueryString中的get参数)的主要内容,如果未能解决你的问题,请参考以下文章

#yyds干货盘点# 前端歌谣的刷题之路-第八十八题-参数解析器

在 Python 中解析类似字典的 URL 参数

NSString+URLParser NSScanner

如何在 URL 中没有 # (哈希)的情况下在 Elm 中进行路由/导航?

如何使用角度路径解析器从api解析数据

ruby Crawler :: UrlParser规范