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 インターフェイスを利用して解析された値に簡単にアクセスできます。 URI 内のエンコードされた文字を確実に正しく処理するために、このメソッドでは URL デコードが実装されていることに注意することが重要です。
機能拡張
このソリューションのその後の更新では、この問題が解決されました。同じキーを持つ複数のパラメーターや値のないパラメーターの処理などの追加の要件。さらに、より新しい Java バージョンを使用しているユーザー向けに Java8 バージョンが提供されています。
この回答が大きな人気を集めたため、提供された Java コードは継続的に改良され、URI 解析に対するより堅牢で汎用性の高いアプローチを提供しています。
以上がJava で URI 文字列を解析して名前と値のコレクションを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。