URI 文字列を名前と値のコレクションに解析する
URI 解析タスクには、URI クエリからの個々のパラメータとそれに対応する値の抽出が含まれます弦。これは、Web アプリケーションや API リクエストで URL を扱うときによく必要となります。
Java で URI 文字列を名前と値のコレクションに解析するには、次のオプションを検討してください:
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 では、同じパラメータに複数の値を使用できます。このケースに対処するには、解析メソッドを変更して、各パラメーターが値のリストにマップされるマップを作成できます。
Java 8 Stream API:
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 中国語 Web サイトの他の関連記事を参照してください。