6

まったく奇妙なことですが、パラメーターの完全なリストを返すための互換性のあるJava /AndroidURLパーサーが見つかりません。

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

誰かが準備ができた解決策を知っていますか?

4

5 に答える 5

12

すべてのパラメータ名のコレクションを取得する方法があります。

String url = "http://domain.com/page?parameter1=value1&parameter2=value2";
List<NameValuePair> parameters = URLEncodedUtils.parse(new URI(url));
for (NameValuePair p : parameters) {
    System.out.println(p.getName());
    System.out.println(p.getValue());
}
于 2012-10-05T11:29:29.177 に答える
4

この静的メソッドは、指定された 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("キー")

于 2014-07-30T16:35:33.980 に答える
3

URLEncodedUtilsをご覧ください

于 2012-10-04T13:17:18.070 に答える
0

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
于 2017-11-12T20:20:34.713 に答える