subString问题,超急,在线等~~~

我的代码不知道为什么不能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            }

26
27            return urlList;
28        }
人到中年有点甜
浏览 517回答 4
4回答

慕森王

建议你使用 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

=。= 估计是超出索引界限了 我记得js的substring和。net的substring处理方式不一样 一个是从索引a到b 一个是从索引a开始的b个字符的长度 建议你try catch下 把for循环try下 看会不会到catch里 你这段代码如果不发生死循环且不抛异常 是不会没有retrun的

BIG阳

你是在做循环标签替换嘛?改为正则表达式方面多了.

临摹微笑

说下你这个代码: #1 效率低是一定的了,因为你这个要遍历每一个字符 #2 代码我测试过这个不存在return不了的问题,应该是 在11行时“if(Html.Substring(i, tempLinkStart.Length) == tempLinkStart)” 这个出现问题,因为当i  本身小于html.length,但是当它再加上一个值时,就很可能出现超出html.length的长度,这样就出现异常了 实质上是Html.Substring(i, tempLinkStart.Length)出现异常                                                    
打开App,查看更多内容
随时随地看视频慕课网APP