栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java 将URI字符串解析为Name-Value集合

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java 将URI字符串解析为Name-Value集合

如果你正在寻找一种无需使用外部库即可实现的方法,则以下代码将为你提供帮助。

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&param2=&param3=value3&param3

返回此地图:

{param1=["value1"], param2=[null], param3=["value3", null]}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/387824.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号