首頁 >Java >java教程 >如何在 Java 中高效地將 URI 字串解析為名稱-值集合?

如何在 Java 中高效地將 URI 字串解析為名稱-值集合?

Linda Hamilton
Linda Hamilton原創
2024-12-19 09:28:10670瀏覽

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn