ホームページ >Java >&#&チュートリアル >Java で URI 文字列を効率的に解析して名前と値のコレクションを作成する方法

Java で URI 文字列を効率的に解析して名前と値のコレクションを作成する方法

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-19 09:28:10654ブラウズ

How to Efficiently Parse a URI String into a Name-Value Collection in Java?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。