我正在尝试使用此代码获取youtube视频ID,但它会显示此错误消息
索引和长度必须指向字符串中的位置。
参数 名称:长度
代码:
string lnk = "http://www.youtube.com/watch?v=9BYphSyf0qY";
int endpoint = (lnk.IndexOf('&') > 0) ? lnk.IndexOf('&') : (lnk.Length - 1);
int startpoint = lnk.IndexOf("v=");
lnk = lnk.Substring(startpoint, endpoint);
答案 0 :(得分:2)
(这个答案不是处理问题,而是一个更清洁的替代方案,可以让你想要)。
您可以使用HttpUtility(需要参考System.Web
):
Uri uri = new Uri("http://www.youtube.com/watch?v=9BYphSyf0qY");
System.Web.HttpUtility.ParseQueryString(uri.Query).Get("v");
答案 1 :(得分:0)
SubString有一个起点和一个长度而不是一个终点:
string lnk = "http://www.youtube.com/watch?v=9BYphSyf0qY";
int endpoint = (lnk.IndexOf('&') > 0) ? lnk.IndexOf('&') : (lnk.Length - 1);
int startpoint = lnk.IndexOf("v=");
lnk = lnk.Substring(startpoint, endpoint-startpoint);
答案 2 :(得分:0)
问题:您将字符串/网址的总长度作为第二个参数。
解决方案: Substring()
将第二个参数作为要提取的字符长度/数量。
所以第二个参数应该是从起点开始的字符串的剩余长度。
试试这个:如果您想将ID设为 - > v=9BYphSyf0qY
lnk = lnk.Substring(startpoint, endpoint - startpoint);
试试这个:如果您只想获得没有v=
的ID部分 - >> 9BYphSyf0qY
startpoint += 2;
lnk = lnk.Substring(startpoint, endpoint - startpoint);
答案 3 :(得分:0)
IndexOf
返回-1
(lnk.Length - 1
)时, IndexOf
会返回索引(字符串中的位置)以及第二种情况的代码,并且您需要提供子字符串的长度作为Substring
调用的第二个参数,如下所示:
lnk = lnk.Substring(startpoint, endpoint - startpoint);
答案 4 :(得分:0)
int endpoint = (lnk.IndexOf('&') > 0) ? lnk.IndexOf('&') : (lnk.Length);
int startpoint = lnk.IndexOf("v=")+2;
lnk = lnk.Substring(startpoint, endpoint-startpoint);
无需从长度中选择一个,但请记住在startpoint中添加2。最后,子串的长度应该是endpoint-startpoint。
<强>结果:强>
Startpoint = 31
Endpoint = 42
ID = 9BYphSyf0qY