我的代码不知道为什么不能return,
别人说,可能是substring改变了自负串的长度
但是,我查过,并没有改变,但是我去掉了subString的部分,果然可以retun,郁闷
谢谢你们了,以下是我的代码
1 public static ArrayList getUrl(string Html, string linkStart, string linkEnd) 2 { 3 ArrayList urlList = new ArrayList(); 4 string tempLinkStart = "{$theLinkStart}"; 5 string tempLinkEnd = "{$theLinkEnd}"; 6 Html = Html.Replace(linkStart, tempLinkStart); 7 Html = Html.Replace(linkEnd, tempLinkEnd); 8 9 for (int i = 0; i < Html.Length; i++)10 {11 if (Html.Substring(i, tempLinkStart.Length) == tempLinkStart) //判断是否查找到tempLinkStart({$theLinkStart})12 {13 for (int j = i + tempLinkStart.Length; j < Html.Length; j++) //从tempLinkStart({$theLinkStart})的后一位开始循环14 {15 if (Html.Substring(j, tempLinkEnd.Length) == tempLinkEnd) //判断是否查找到tempLinkEnd({$theLinkEnd})16 {17 //把tempLinkStart({$theLinkStart})与tempLinkEnd({$theLinkEnd})之间的内容添加到urlList里18 urlList.Add(Html.Substring(i + tempLinkStart.Length, j - (i + tempLinkStart.Length)).ToString());19 //MessageBox.Show(Html.Substring(i + tempLinkStart.Length, j - (i + tempLinkStart.Length)).ToString());20 break;21 }22 }23 }24 MessageBox.Show(Html.Length.ToString()); //我这里为了测试,出数html的长度,但是没有问题~~不变的!但是不知道为什么return不了25 }2627 return urlList;28 }
4 回答
慕森王
TA贡献1777条经验 获得超3个赞
建议你使用 Html.Indexof(tempLinkStart, i) 来进行判断,而不要使用SubString
而且你用这个for 循环,效率太低,应使用 while 循环,
while (i < Html.Length)
{
int pos = Html.Indexof(tempLinkStart, i);
if (pos < 0)
{//未找到tempLinkStart
break;
}
else
{
i = pos + tempLinkStart.Length;
}
}
这样做效率要高很多。
GCT1015
TA贡献1827条经验 获得超4个赞
=。=
估计是超出索引界限了
我记得js的substring和。net的substring处理方式不一样
一个是从索引a到b
一个是从索引a开始的b个字符的长度
建议你try catch下
把for循环try下
看会不会到catch里
你这段代码如果不发生死循环且不抛异常
是不会没有retrun的
临摹微笑
TA贡献1982条经验 获得超2个赞
说下你这个代码: #1 效率低是一定的了,因为你这个要遍历每一个字符 #2 代码我测试过这个不存在return不了的问题,应该是 在11行时“if(Html.Substring(i, tempLinkStart.Length) == tempLinkStart)” 这个出现问题,因为当i 本身小于html.length,但是当它再加上一个值时,就很可能出现超出html.length的长度,这样就出现异常了 实质上是Html.Substring(i, tempLinkStart.Length)出现异常
- 4 回答
- 0 关注
- 531 浏览
添加回答
举报
0/150
提交
取消