字符串显示错误消息的子字符串

时间:2014-01-16 13:55:20

标签: c#

我正在尝试使用此代码获取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);

5 个答案:

答案 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返回-1lnk.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