从java url获取“”之后的参数

从java url获取“”之后的参数,java,android,uri,Java,Android,Uri,我有一个表单的重定向uri。我正在尝试从此url获取acces令牌。尝试了以下方法 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. 有直接的方法吗?请帮助您可以用

我有一个表单的重定向uri。我正在尝试从此url获取acces令牌。尝试了以下方法

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.

有直接的方法吗?请帮助

您可以用这种方式尝试

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]);
发出

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

可以将String方法splitString与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

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

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;

}

有些人可能会觉得这很有帮助

   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");

工作起来很有魅力,也很容易使用,稍后谢谢:-

您可以获取索引,然后使用邮件uri字符串创建子字符串。请使用任何其他方法?getFragment是最好的方法。URL/URI会将URL之后的所有内容视为一个大值。如果它是分隔的或有特殊的编码,这取决于应用程序,在本例中,您需要处理。@WilliamPrice是的。但是我必须再次拆分字符串以获取令牌。还有其他方法吗?pls@deniz没有其他神奇的方法可以自动知道该做什么,没有。你必须编写代码。
   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");