在"#"之后获取参数来自url java

时间:2014-09-24 06:51:20

标签: java android uri

我有一个https://stackexchange.com/oauth/login_success#access_token=token&expires=5678形式的重定向uri。我试图从这个网址获取访问令牌。尝试了以下方法

uri.getQueryParameter("access_token"); //will return null since it is not a query param

uri.getFragment(); //will return "access_token=token&expires=5678" so i need to seperate it again.

任何直接方法?请帮忙

4 个答案:

答案 0 :(得分:2)

简单而优雅的解决方案,可以获得您想要的值:

public static Map<String, String> parseUrlFragment (String url) {

    Map<String, String> output = new LinkedHashMap<> ();

    String[] keys = url.split ("&");

    for (String key : keys) {

        String[] values = key.split ("=");
        output.put (values[0], (values.length > 1 ? values[1] : ""));

    }

    return output;

}

它使用LinkedHashMap来表示值,因此它是输出:

Map<String, String> data = parseUrlFragment (uri.getFragment ());

data.get ("access_token") // token
data.get ("expires") // 5678

答案 1 :(得分:1)

有人可能会觉得有用

   String queryAfterFragment = uri.getFragment();
   String dummy_url = "http://localhost?" + queryAfterFragment;
   Uri dummy_uri = Uri.parse(dummy_url);
   String access_token = dummy_uri.getQueryParameter("access_token");

作品魅力十足且易于使用,稍后谢谢:-)

答案 2 :(得分:0)

你可以这样试试

String str = "https://stackexchange.com/oauth/
                             login_success#access_token=token&expires=5678";
int indexOfHash = str.indexOf("#");
// now you can substring from this
String subStr = str.substring(indexOfHash+1, str.length());
System.out.println(subStr);
// now you can substring from &
String sStr=subStr.substring(0,subStr.indexOf("&"));
System.out.println(sStr);
// now you can get token
String[] arr=sStr.split("=");
System.out.println(arr[0]);
System.out.println(arr[1]);

Out put

access_token=token&expires=5678
access_token=token
access_token
token

答案 3 :(得分:0)

您可以将String方法split(String)与Regex

一起使用
str.split("#|&|=") 

这会通过传递的3个字符拆分字符串,然后得到一个包含所有拆分部分的数组。

String s = 
    "https://stackexchange.com/oauth/login_success#access_token=token&expires=5678";
final String[] split = s.split("#|&|=");
for (String s1 : split) {
  System.out.println(s1);
}

输出:

https://stackexchange.com/oauth/login_success
access_token
token
expires
5678