在java中获取URL参数并从该URL中提取特定文本

我有一个URL,我需要从这个URL获取v的值。 这是我的url: http : //www.youtube.com/watch?v = _RCIP6OrQrE

任何有用和富有成效的帮助都非常感谢..

我认为最简单的方法之一是将URL.getQuery()返回的字符串解析为

 public static Map getQueryMap(String query) { String[] params = query.split("&"); Map map = new HashMap(); for (String param : params) { String name = param.split("=")[0]; String value = param.split("=")[1]; map.put(name, value); } return map; } 

您可以使用此函数返回的映射来检索键入参数名称的值。

如果您使用的是Android,则可以执行以下操作:

 Uri uri = Uri.parse(url); String v = uri.getQueryParameter("v"); 

我在上个月为Joomla Module撰写了这篇文章,用于实现YouTubevideo(使用Gdata API )。 我已经将它转换为java。

导入这些库

  import java.net.URL; import java.util.regex.*; 

复制/粘贴此function

  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) 

导入这些库

 import org.apache.http.NameValuePair; import org.apache.http.message.BasicNameValuePair; 

与verisimilitude类似,但具有处理多值参数的function。 注意:我看到没有值的HTTP GET请求,在这种情况下,该值将为null。

 public static List getQueryMap(String query) { List queryMap = new ArrayList(); 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%... 

假设URL语法始终为http://www.youtube.com/watch?v=

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

我的解决方案可能并不好

  String url = "https://www.youtube.com/watch?param=test&v=XcHJMiSy_1c&lis=test"; int start = url.indexOf("v=")+2; // int start = url.indexOf("list=")+5; **5 is length of ("list=")** int end = url.indexOf("&", start); end = (end == -1 ? url.length() : end); System.out.println(url.substring(start, end)); // result: XcHJMiSy_1c 

工作得很好:

这将适用于所有类型的youtubeurl:
如果url可以

youtube.com/?v=_RCIP6OrQrE
youtube.com/v/_RCIP6OrQrE
youtube.com/watch?v=_RCIP6OrQrE
youtube.com/watch?v=_RCIP6OrQrE&feature=whatever&this=that

 Pattern p = Pattern.compile("http.*\\?v=([a-zA-Z0-9_\\-]+)(?:&.)*"); String url = "http://www.youtube.com/watch?v=_RCIP6OrQrE"; Matcher m = p.matcher(url.trim()); //trim to remove leading and trailing space if any if (m.matches()) { url = m.group(1); } System.out.println(url); 

这将从您的url提取videoID

进一步参考

我有这样的事情:

 import org.apache.http.NameValuePair; import org.apache.http.client.utils.URIBuilder; private String getParamValue(String link, String paramName) throws URISyntaxException { List queryParams = new URIBuilder(link).getQueryParams(); return queryParams.stream() .filter(param -> param.getName().equalsIgnoreCase(paramName)) .map(NameValuePair::getValue) .findFirst() .orElse(""); }