我有一个URL,需要从中获取v的值。
这是我的URL: http://www.youtube.com/watch?v=_RCIP6OrQrE
我该如何做呢?
我有一个URL,需要从中获取v的值。
这是我的URL: http://www.youtube.com/watch?v=_RCIP6OrQrE
我该如何做呢?
我认为最简单的方法之一是将URL.getQuery()返回的字符串解析为
public static Map<String, String> getQueryMap(String query) {
String[] params = query.split("&");
Map<String, String> map = new HashMap<String, String>();
for (String param : params) {
String name = param.split("=")[0];
String value = param.split("=")[1];
map.put(name, value);
}
return map;
}
您可以使用该函数返回的映射来检索以参数名称为键的值。example.com.com?param
或 example.com?param=
这样的 URL,也会抛出 ArrayIndexOutOfBoundsException 异常。 - PanthroString value = param.split("=")[1];
改为
String value = param.split(name+"=")[1];
现在似乎可以正常工作了。 - Dr. Gadget如果你使用的是安卓系统,你可以按照以下步骤进行:
Uri uri = Uri.parse(url);
String v = uri.getQueryParameter("v");
import org.apache.http.NameValuePair;
import org.apache.http.client.utils.URIBuilder;
private String getParamValue(String link, String paramName) throws URISyntaxException {
List<NameValuePair> queryParams = new URIBuilder(link).getQueryParams();
return queryParams.stream()
.filter(param -> param.getName().equalsIgnoreCase(paramName))
.map(NameValuePair::getValue)
.findFirst()
.orElse("");
}
上个月我为Joomla模块编写了这篇文章,用于实现YouTube视频(使用Gdata API)。之后我将其转换为java。
导入这些库
import java.net.URL;
import java.util.regex.*;
复制/粘贴此函数
public String getVideoId( String videoId ) throws Exception {
String pattern = "^(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(videoId);
int youtu = videoId.indexOf("youtu");
if(m.matches() && youtu != -1){
int ytu = videoId.indexOf("http://youtu.be/");
if(ytu != -1) {
String[] split = videoId.split(".be/");
return split[1];
}
URL youtube = new URL(videoId);
String[] split = youtube.getQuery().split("=");
int query = split[1].indexOf("&");
if(query != -1){
String[] nSplit = split[1].split("&");
return nSplit[0];
} else return split[1];
}
return null; //throw something or return what you want
}
适用于以下URL
http://www.youtube.com/watch?v=k0BWlvnBmIE (General URL)
http://youtu.be/k0BWlvnBmIE (Share URL)
http://www.youtube.com/watch?v=UWb5Qc-fBvk&list=FLzH5IF4Lwgv-DM3CupM3Zog&index=2 (Playlist URL)
Arrays.toString(tokens)
。 - rtheunissen导入这些库
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
与真实性相似,但具有处理多值参数的能力。注意:我见过没有值的HTTP GET请求,在这种情况下,该值将为null。
public static List<NameValuePair> getQueryMap(String query)
{
List<NameValuePair> queryMap = new ArrayList<NameValuePair>();
String[] params = query.split(Pattern.quote("&"));
for (String param : params)
{
String[] chunks = param.split(Pattern.quote("="));
String name = chunks[0], value = null;
if(chunks.length > 1) {
value = chunks[1];
}
queryMap.add(new BasicNameValuePair(name, value));
}
return queryMap;
}
例子:
GET /bottom.gif?e235c08=1509896923&%49%6E%...
使用纯Java 8
假设您想从URL中提取参数“v”:
String paramV = Stream.of(url.split("?")[1].split("&"))
.map(kv -> kv.split("="))
.filter(kv -> "v".equalsIgnoreCase(kv[0]))
.map(kv -> kv[1])
.findFirst()
.orElse("");
public Map<String, String> getUrlValues(String url) throws UnsupportedEncodingException {
int i = url.indexOf("?");
Map<String, String> paramsMap = new HashMap<>();
if (i > -1) {
String searchURL = url.substring(url.indexOf("?") + 1);
String params[] = searchURL.split("&");
for (String param : params) {
String temp[] = param.split("=");
paramsMap.put(temp[0], java.net.URLDecoder.decode(temp[1], "UTF-8"));
}
}
return paramsMap;
}
2: 在调用函数时加上try catch块
来吧,我们开始吧。
try {
Map<String, String> values = getUrlValues("https://example.com/index.php?form_id=9&page=1&view_id=78");
String formId = values.get("form_id");
String page = values.get("page");
String viewId = values.get("view_id");
Log.d("FormID", formId);
Log.d("Page", page);
Log.d("ViewID", viewId);
} catch (UnsupportedEncodingException e) {
Log.e("Error", e.getMessage());
}
var multiValueMap = UriComponent.decodeQuery(uri, true);
它是 org.glassfish.jersey.uri.UriComponent
的一部分,javadoc 在 这里。虽然你可能不想要所有的 Jersey,但它是 Jersey common package 的一部分,依赖关系不太严重...I solved the problem like this
public static String getUrlParameterValue(String url, String paramName) {
String value = "";
List<NameValuePair> result = null;
try {
result = URLEncodedUtils.parse(new URI(url), UTF_8);
value = result.stream().filter(pair -> pair.getName().equals(paramName)).findFirst().get().getValue();
System.out.println("--------------> \n" + paramName + " : " + value + "\n");
} catch (URISyntaxException e) {
e.printStackTrace();
}
return value;
}
String v = "http://www.youtube.com/watch?v=_RCIP6OrQrE".substring(31);
或者忽略前缀语法:
String url = "http://www.youtube.com/watch?v=_RCIP6OrQrE";
String v = url.substring(url.indexOf("v=") + 2);
url-string
中查找值v
? - sunilid
。 - Harmeet Singh