यदि आप बाहरी पुस्तकालय का उपयोग किए बिना इसे प्राप्त करने का एक तरीका ढूंढ रहे हैं, तो निम्न कोड आपकी सहायता करेगा।
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")
, आपके प्रश्न में दिए गए URL के साथ यह "SS" वापस आ जाएगा।
अद्यतन URL-डिकोडिंग जोड़ा गया
अद्यतन जैसा कि यह उत्तर अभी भी काफी लोकप्रिय है, मैंने ऊपर दिए गए विधि का एक उन्नत संस्करण बनाया है, जो एक ही कुंजी के साथ कई मापदंडों को संभालता है और साथ ही बिना मूल्य के पैरामीटर भी।
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 संस्करण
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);
}
URL के साथ उपरोक्त विधि चलाना
https://stackoverflow.com?param1=value1¶m2=¶m3=value3¶m3
यह नक्शा लौटाता है:
{param1=["value1"], param2=[null], param3=["value3", null]}