Получить коллекцию имен параметров из Java / Android url
Это абсолютно странно, но я не могу найти ни одного Java/Android синтаксического анализатора URL, который был бы совместим, чтобы вернуть полный список параметров.
Я нашел java. net. URL и android. net. Uri, но они не могут возвращать коллекцию параметров.
Я хочу передать строку url, например
String url = "http://s3.amazonaws.com/?AWSAccessKeyId=123&Policy=456&Signature=789&key=asdasd&Content-Type=text/plain&acl=public-read&success_action_status=201";
SomeBestUrlParser parser = new SomeBestUrlParser(url);
String[] parameters = parser.getParameterNames();
// should prints array with following elements
// AWSAccessKeyId, Policy, Signature, key, Content-Type, acl, success_action_status
Кто-нибудь знает готовое решение?
5 ответов:
Есть способ получить коллекцию всех имен параметров.
String url = "http://domain.com/page?parameter1=value1¶meter2=value2"; List<NameValuePair> parameters = URLEncodedUtils.parse(new URI(url)); for (NameValuePair p : parameters) { System.out.println(p.getName()); System.out.println(p.getValue()); }
Этот статический метод строит карту параметров из заданного URL
private Map<String, String> extractParamsFromURL(final String url) throws URISyntaxException { return new HashMap<String, String>() {{ for(NameValuePair p : URLEncodedUtils.parse(new URI(url), "UTF-8")) put(p.getName(), p.getValue()); }}; }
Использование
ExtractParamsFromURL (url).get ("ключ")
Посмотрите на URLEncodedUtils
UrlQuerySanitizer добавлен в API level 1
UrlQuerySanitizer sanitizer = new UrlQuerySanitizer(url_string); List<UrlQuerySanitizer.ParameterValuePair> list = sanitizer.getParameterList(); for (UrlQuerySanitizer.ParameterValuePair pair : list) { System.out.println(pair.mParameter); System.out.println(pair.mValue); }
Библиотекаurllib проанализирует параметры строки запроса и позволит получить доступ к парам в виде списка или карты. Используйте список, если там могут быть дубликаты ключей, в противном случае карта довольно удобна.
Учитывая этот фрагмент:
String raw = "http://s3.amazonaws.com/?AWSAccessKeyId=123&Policy=456&Signature=789&key=asdasd&Content-Type=text/plain&acl=public-read&success_action_status=201"; Url url = Url.parse(raw); System.out.println(url.query().asMap()); for (KeyValue param : url.query().params()) { System.out.println(param.key() + "=" + param.value()); }
Вывод:
{Policy=456, success_action_status=201, Signature=789, AWSAccessKeyId=123, acl=public-read, key=asdasd, Content-Type=text/plain} AWSAccessKeyId=123 Policy=456 Signature=789 key=asdasd Content-Type=text/plain acl=public-read success_action_status=201