我正在使用以下功能从YouTube网址获取视频ID。
static String getVideoIdFromUrl(String url) {
String regex = "http(?:s)?://(?:www\\.)?youtu(?:\\.be/|be\\.com/(?:watch\\?v=|v/\u200C\u200B|embed/|user/(?:[\\w#\u200C\u200B]+/)+))([^&#?\\n]+)";
String id = null;
Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(url);
if (matcher.matches()) {
id = matcher.group(1);
}
return id;
}
这适用于获取几乎所有格式的视频ID。但是,当提供带有时间戳的URL时,它将返回null。
http://www.youtube.com/watch?v=0zM4nApSvMg#t=0m10s
https://www.youtube.com/watch?v=Br5xdYVbcWw&t=50
如何编写一个返回视频ID和时间戳的函数?
答案 0 :(得分:1)
您无法在java中返回多个变量,但是您可以将id
和time
加载到HashMap
并返回该变量。它可能类似于以下内容:
static Map<String,String> getVideoIdFromUrl(String url) {
// PATTERN
String regex = "v=([^#&\n\r]+)|t=([^#&\n\r]+)";
// INIT RETURN DATA
String id = "";
String time = "";
// RUN REGEX
Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(url);
// CHECK
while (matcher.find()) {
// SET ID
if(matcher.group(1) != null)
id = matcher.group(1);
// SET TIME
if(matcher.group(2) != null)
time = matcher.group(2);
}
// BUILD RETURN DATA
Map<String,String> returnData = new HashMap<String, String>();
returnData.put("id", id);
returnData.put("time", time);
// RETURN
return returnData;
}
我使用以下输出运行此函数:
// RUN FUNCTION
Map<String,String> returnMap = myObject.getVideoIdFromUrl("http://www.youtube.com/watch?v=0zM4nApSvMg#t=0m10s");
// PRINT OUTPUT
System.out.println(returnMap);
// PRINTS:
// {id=0zM4nApSvMg, time=0m10s}