Harici bir kitaplık kullanmadan bunu başarmanın bir yolunu arıyorsanız, aşağıdaki kod size yardımcı olacaktır.
public static Map<String, String> splitQuery(URL url) throws UnsupportedEncodingException {
Map<String, String> query_pairs = new LinkedHashMap<String, String>();
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;
}
<map>.get("client_id")
Sorunuza verilen URL ile "SS" döndürülecek şekilde, döndürülen Haritaya erişebilirsiniz .
UPDATE URL Kod Çözme eklendi
GÜNCELLEME Bu cevap hala oldukça popüler olduğu için yukarıdaki yöntemin, aynı anahtarla birden fazla parametreyi ve değeri olmayan parametreleri işleyen gelişmiş bir sürümünü yaptım.
public static Map<String, List<String>> splitQuery(URL url) throws UnsupportedEncodingException {
final Map<String, List<String>> query_pairs = new LinkedHashMap<String, List<String>>();
final String[] pairs = url.getQuery().split("&");
for (String pair : pairs) {
final int idx = pair.indexOf("=");
final String key = idx > 0 ? URLDecoder.decode(pair.substring(0, idx), "UTF-8") : pair;
if (!query_pairs.containsKey(key)) {
query_pairs.put(key, new LinkedList<String>());
}
final String value = idx > 0 && pair.length() > idx + 1 ? URLDecoder.decode(pair.substring(idx + 1), "UTF-8") : null;
query_pairs.get(key).add(value);
}
return query_pairs;
}
Java8 sürümünü GÜNCELLE
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())));
}
public SimpleImmutableEntry<String, String> splitQueryParameter(String it) {
final int idx = it.indexOf("=");
final String key = idx > 0 ? it.substring(0, idx) : it;
final String value = idx > 0 && it.length() > idx + 1 ? it.substring(idx + 1) : null;
return new SimpleImmutableEntry<>(key, value);
}
Yukarıdaki yöntemi URL ile çalıştırma
https://stackoverflow.com?param1=value1¶m2=¶m3=value3¶m3
bu haritayı döndürür:
{param1=["value1"], param2=[null], param3=["value3", null]}