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