Ayrıştırma java ad-değer koleksiyonuna Urı dizesi
Bu gibi URI var:
Ayrıştırılmış öğeleri içeren bir koleksiyon ihtiyacım var:
NAME VALUE
------------------------
client_id SS
response_type code
scope N_FULL
access_type offline
redirect_uri http://localhost/Callback
Tam olarak, C için bir Java eşdeğer ihtiyacım var# HttpUtility.ParseQueryString Yöntemi. Lütfen, bana bu konuda bir tavsiye vermek. Teşekkürler.
CEVAP
Eğer bir şekilde harici bir kütüphane kullanmadan bunu başarmak için 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;
}
İade Harita bu döndürecektir URL sorunuza verilen <map>.get("client_id")
kullanarak eriÅŸebilirsiniz "SS".
GÜNCELLEMEURL kod Çözme ekledi
GÜNCELLEMEBu cevap hala oldukça popüler olduğu gibi, aynı anahtara sahip birden çok parametre işleme yöntemi yukarıda, geliştirilmiş bir versiyonu yaptım ve hiçbir değeri de parametreleri.
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;
}
URL ile çalışan yukarıdaki yöntem "http://stackoverflow.com?param1=value1¶m2=¶m3=value3¶m3" bu Harita döndürür: {param1=[""] deÄŸer1, param2=[null], param3=["value3", null]}
Java: bir char int değer ayrıştırma...
Neden't Java imzasız değer vermez...
Nasıl Java JSON ayrıştırma...
En verimli şekilde artış Java Göster b...
Java, nasıl bir dosya yerine bir Dize ...