SORU
27 Kasım 2012, Salı


Ayrıştırma java ad-değer koleksiyonuna Urı dizesi

Bu gibi URI var:

https://google.com.ua/oauth/authorize?client_id=SS&response_type=code&scope=N_FULL&access_type=offline&redirect_uri=http://localhost/Callback

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
27 Kasım 2012, Salı


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]}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Justin Case

    Justin Case

    3 EKİM 2011
  • Muse

    Muse

    28 EYLÜL 2006
  • Vagrant Records

    Vagrant Reco

    8 Mayıs 2006