如果你正在寻找一种无需使用外部库即可实现的方法,则以下代码将为你提供帮助。
public static Map<String, String> splitQuery(URL url) throws UnsupportedEncodingException { Map<String, String> query_pairs = new linkedHashMap<String, String>(); String query = url.getQuery(); String[] pairs = query.split("&"); for (String pair : pairs) { int idx = pair.indexOf("="); query_pairs.put(URLDeprer.depre(pair.substring(0, idx), "UTF-8"), URLDeprer.depre(pair.substring(idx + 1), "UTF-8")); } return query_pairs;}你可以使用来访问返回的
Map <map>.get("client_id"),并在问题中提供URL,这将返回“ SS”。添加了更新 URL解码
更新由于此答案仍然很受欢迎,因此我对上述方法进行了改进,该方法可以处理具有相同键的多个参数以及没有值的参数。
public static Map<String, List<String>> splitQuery(URL url) throws UnsupportedEncodingException { final Map<String, List<String>> query_pairs = new linkedHashMap<String, List<String>>(); final String[] pairs = url.getQuery().split("&"); for (String pair : pairs) { final int idx = pair.indexOf("="); final String key = idx > 0 ? URLDeprer.depre(pair.substring(0, idx), "UTF-8") : pair; if (!query_pairs.containsKey(key)) { query_pairs.put(key, new linkedList<String>()); } final String value = idx > 0 && pair.length() > idx + 1 ? URLDeprer.depre(pair.substring(idx + 1), "UTF-8") : null; query_pairs.get(key).add(value); } return query_pairs;}UPDATE Java8版本
public Map<String, List<String>> splitQuery(URL url) { if (Strings.isNullOrEmpty(url.getQuery())) { return Collections.emptyMap(); } return Arrays.stream(url.getQuery().split("&")) .map(this::splitQueryParameter) .collect(Collectors.groupingBy(SimpleImmutableEntry::getKey, linkedHashMap::new, mapping(Map.Entry::getValue, toList())));}public SimpleImmutableEntry<String, String> splitQueryParameter(String it) { final int idx = it.indexOf("="); final String key = idx > 0 ? it.substring(0, idx) : it; final String value = idx > 0 && it.length() > idx + 1 ? it.substring(idx + 1) : null; return new SimpleImmutableEntry<>(key, value);}使用网址运行上述方法
https://stackoverflow.com?param1=value1¶m2=¶m3=value3¶m3
返回此地图:
{param1=["value1"], param2=[null], param3=["value3", null]}


