35

URL があり、この URL から v の値を取得する必要があります。これが私のURLです:http://www.youtube.com/watch?v=_RCIP6OrQrE

どうやってやるの?

4

13 に答える 13

67

最も簡単な方法の1つは、 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;  
}

この関数によって返されるマップを使用して、パラメーター名の値のキーイングを取得できます。

于 2012-07-31T05:31:57.217 に答える
27

Android を使用している場合は、次の操作を実行できます。

Uri uri = Uri.parse(url);
String v = uri.getQueryParameter("v");
于 2016-11-08T02:18:28.350 に答える
3

先月、YouTube ビデオを ( Gdata APIを使用して) 実装するときに、Joomla モジュールについてこれを書きました。それ以来、私はそれを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)
于 2012-07-31T05:17:35.030 に答える
3

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);
于 2012-07-31T05:27:31.723 に答える
2

私はこのような問題を解決しました

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;

}

于 2019-10-27T09:09:42.340 に答える
2

Jerseyを使用している場合(私のサーバー コンポーネントは送信 HTTP リクエストを作成する必要があります)、次のパブリック メソッドが含まれています。

var multiValueMap = UriComponent.decodeQuery(uri, true);

これは の一部でorg.glassfish.jersey.uri.UriComponentあり、javadoc はここにあります。Jersey のすべてが必要なわけではないかもしれませんが、Jersey 共通パッケージの一部であり、依存関係がそれほど悪くありません...

于 2019-03-29T16:36:30.680 に答える
0

これは、あらゆる種類のyoutube 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);

これにより、ビデオIDが抽出されますurl

さらなる参照

于 2012-07-31T05:33:56.307 に答える