將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中文網其他相關文章!