首页 > Java > java教程 > 如何在 Java 中高效地将 URI 字符串解析为名称-值集合?

如何在 Java 中高效地将 URI 字符串解析为名称-值集合?

Linda Hamilton
发布: 2024-12-19 09:28:10
原创
653 人浏览过

How to Efficiently Parse a URI String into a Name-Value Collection in Java?

将 URI 字符串解析为名称-值集合

URI 解析任务涉及从 URI 查询中提取各个参数及其对应的值细绳。这是处理 Web 应用程序和 API 请求中的 URL 时的常见需求。

要将 URI 字符串解析为 Java 中的名称-值集合,请考虑以下选项:

  • 使用第三方库:

Apache Commons Lang 或Google Guava 提供了 URI 解析的方法。这些库提供了简洁方便的方法,处理 URL 解码和其他常见任务。

  • 无需库的手动解析:

如果您更喜欢更实际的方法,您可以实现自己的解析逻辑,如下所示:

public static Map<String, String> splitQuery(URL url) throws UnsupportedEncodingException {
    Map<String, String> queryPairs = new LinkedHashMap<>();
    String query = url.getQuery();
    String[] pairs = query.split("&");
    for (String pair : pairs) {
        int idx = pair.indexOf("=");
        queryPairs.put(URLDecoder.decode(pair.substring(0, idx), "UTF-8"), URLDecoder.decode(pair.substring(idx + 1), "UTF-8"));
    }
    return queryPairs;
}
登录后复制

这个方法将查询字符串拆分为单独的对,对它们进行 URL 解码,并将它们存储在 Map 中。您可以使用 map.get("paramName") 检索单个值。

处理 URL 解码:

请记住,查询字符串值可能是 URL 编码的。您可以使用 URLDecoder 类将它们转换为明文。

处理特殊情况:

上面的解析逻辑假设每个参数都有一个值。但是,某些 URI 允许同一参数有多个值。要处理这种情况,您可以修改解析方法以创建一个 Map,其中每个参数映射到一个值列表。

Java 8 Stream API:

In Java 8、可以使用流来简化解析过程。以下代码片段演示了这种方法:

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())));
}
登录后复制

此版本的方法返回一个 Map,其中每个键代表一个参数,对应的值是一个参数值列表。

以上是如何在 Java 中高效地将 URI 字符串解析为名称-值集合?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板