Parsen Sie einen URI-String in eine Name-Wert-Sammlung
Die URI-Parsing-Aufgabe umfasst das Extrahieren der einzelnen Parameter und ihrer entsprechenden Werte aus einer URI-Abfrage Zeichenfolge. Dies ist ein häufiges Bedürfnis beim Umgang mit URLs in Webanwendungen und API-Anfragen.
Um eine URI-Zeichenfolge in eine Name-Wert-Sammlung in Java zu analysieren, ziehen Sie die folgenden Optionen in Betracht:
Bibliotheken wie Apache Commons Lang oder Google Guava bieten Methoden für URI-Analyse. Diese Bibliotheken bieten einen übersichtlichen und bequemen Ansatz für die URL-Dekodierung und andere häufige Aufgaben.
Wenn Sie Bevorzugen Sie einen praktischeren Ansatz, können Sie Ihre eigene Parsing-Logik wie folgt implementieren:
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; }
Diese Methode teilt die Abfragezeichenfolge auf in einzelne Paare, dekodiert sie per URL und speichert sie in einer Karte. Sie können einzelne Werte mit map.get("paramName") abrufen.
Umgang mit der URL-Dekodierung:
Bedenken Sie, dass die Abfragezeichenfolgenwerte URL-kodiert sein können. Sie können die URLDecoder-Klasse verwenden, um sie in Klartext umzuwandeln.
Sonderfälle behandeln:
Die obige Parsing-Logik geht davon aus, dass jeder Parameter einen einzelnen Wert hat. Einige URIs erlauben jedoch mehrere Werte für denselben Parameter. Um diesen Fall zu behandeln, können Sie die Parsing-Methode ändern, um eine Karte zu erstellen, in der jeder Parameter einer Liste von Werten zugeordnet wird.
Java 8 Stream API:
In Java 8 können Sie Streams verwenden, um den Parsing-Prozess zu vereinfachen. Der folgende Codeausschnitt veranschaulicht diesen Ansatz:
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()))); }
Diese Version der Methode gibt eine Map zurück, in der jeder Schlüssel einen Parameter darstellt und der entsprechende Wert eine Liste von Parameterwerten ist.
Das obige ist der detaillierte Inhalt vonWie kann man einen URI-String effizient in eine Name-Wert-Sammlung in Java analysieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!