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

  • Britec09

    Britec09

    4 Mart 2009
  • Droid Life

    Droid Life

    17 Kasım 2009
  • joshsnice

    joshsnice

    28 Kasım 2006