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

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

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-18 22:05:11565浏览

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

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

由于缺少与 C#/.NET 的 HttpUtility 等效的显式定义的 Java。 ParseQueryString 方法,需要使用替代方法将 URI 字符串解析为名称-值集合。本答案探讨了实现此功能的自定义 Java 实现。

用于 URI 解析的 Java 代码

以下 Java 代码可用于将 URI 字符串拆分为名称-值对集合:

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

使用和示例

可以使用 URL 作为参数来调用此方法,它返回一个包含解析的名称-值对的 Map。例如,使用问题中提供的 URI:

URL url = new URL("https://google.com.ua/oauth/authorize?client_id=SS&response_type=code&scope=N_FULL&access_type=offline&redirect_uri=http://localhost/Callback");
Map<String, String> query_pairs = splitQuery(url);
System.out.println(query_pairs.get("client_id")); // prints "SS"

此方法可以通过利用 Map 接口轻松访问已解析的值。需要注意的是,此方法中实现了 URL 解码,以确保正确处理 URI 中的编码字符。

增强功能

此解决方案的后续更新已解决额外的要求,例如处理具有相同键的多个参数和没有值的参数。此外,还为那些使用较新 Java 版本的用户提供了 Java8 版本。

由于此响应已获得广泛欢迎,因此所提供的 Java 代码已不断完善,以提供更强大、更通用的 URI 解析方法。

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn