为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

人到中年有点甜 2018-12-07 05:19:12
我的代码不知道为什么不能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; } } 这样做效率要高很多。
查看完整回答
反对 回复 2019-01-21
?
GCT1015

TA贡献1827条经验 获得超4个赞

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

TA贡献1859条经验 获得超6个赞

你是在做循环标签替换嘛?改为正则表达式方面多了.
查看完整回答
反对 回复 2019-01-21
?
临摹微笑

TA贡献1982条经验 获得超2个赞

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

查看完整回答
反对 回复 2019-01-21
  • 4 回答
  • 0 关注
  • 531 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信