从java url获取“”之后的参数
我有一个表单的重定向uri。我正在尝试从此url获取acces令牌。尝试了以下方法从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.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");