Menghuraikan Rentetan URI ke dalam Koleksi Nilai-Nama
Tugas penghuraian URI melibatkan mengekstrak parameter individu dan nilai sepadannya daripada pertanyaan URI rentetan. Ini adalah keperluan biasa apabila berurusan dengan URL dalam aplikasi web dan permintaan API.
Untuk menghuraikan rentetan URI ke dalam koleksi nilai nama dalam Java, pertimbangkan pilihan berikut:
Perpustakaan seperti Apache Commons Lang atau Google Jambu batu menyediakan kaedah untuk penghuraian URI. Perpustakaan ini menawarkan pendekatan yang ringkas dan mudah, mengendalikan penyahkodan URL dan tugas biasa lain.
Jika anda lebih suka pendekatan yang lebih praktikal, anda boleh melaksanakan logik penghuraian anda sendiri seperti berikut:
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; }
Ini kaedah membahagikan rentetan pertanyaan kepada pasangan individu, menyahkod URL mereka dan menyimpannya dalam Peta. Anda boleh mendapatkan semula nilai individu menggunakan map.get("paramName").
Mengendalikan Penyahkodan URL:
Ingat bahawa nilai rentetan pertanyaan mungkin dikodkan URL. Anda boleh menggunakan kelas URLDecoder untuk menukarnya kepada plaintext.
Mengendalikan Kes Khas:
Logik penghuraian di atas menganggap bahawa setiap parameter mempunyai nilai tunggal. Walau bagaimanapun, sesetengah URI membenarkan berbilang nilai untuk parameter yang sama. Untuk mengendalikan kes ini, anda boleh mengubah suai kaedah penghuraian untuk mencipta Peta yang setiap parameter dipetakan ke Senarai nilai.
API Strim Java 8:
Dalam Java 8, anda boleh menggunakan strim untuk memudahkan proses penghuraian. Coretan kod berikut menunjukkan pendekatan ini:
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()))); }
Versi kaedah ini mengembalikan Peta yang setiap kunci mewakili parameter dan nilai yang sepadan ialah Senarai nilai parameter.
Atas ialah kandungan terperinci Bagaimana untuk Menghuraikan Rentetan URI ke dalam Koleksi Nilai Nama dengan Cekap di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!