将 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中文网其他相关文章!