当遍历字符串时,IndexOutOfRangeException

本文关键字:IndexOutOfRangeException 字符串 遍历 | 更新日期: 2023-09-27 18:07:22

我正在制作一个工具来习惯c#,基本上这个工具将显示一个网站的信息,但我将添加一些有趣的统计数据。

我在两个标签之间抓取数据的部分。我尝试使用regex和其他库来做到这一点,但最后我开始做我自己的算法来获取数据。

我习惯了C算法,所以我用循环检查是否有发生。

while (tag1 < result.Length)
{
    if (result[tag1] == 'h' && result[tag1 + 1] == 'r' && result[tag1 + 2] == 'e' && result[tag1 + 3] == 'f')
    {
        List<char>temp = new List<char>();
        tag1 += 4;
        while (result[tag1] != '>')
            tag1++;
        tag1++;
        this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate()
        {
            richtextbox1.AppendText(Environment.NewLine + result[tag1 + 7]);
        });
        while (result[tag1] != '<')
        {
            //this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate()
            //{
            //    richtextbox1.AppendText(Environment.NewLine + result[tag1]);
            //});
            temp.Add(result[tag1]);
            tag1++;
        }
        string s = string.Join(",", temp.ToArray());
        this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate()
        {
            richtextbox1.AppendText(Environment.NewLine + temp);
        });
    }
    tag1++;
}

下面是一个示例HTML行,我想在其中获取"昵称"

<td class="ak-rank"><span class="ak-icon-position">107235</span></td>                  <td class="ak-name"><span class="ak-breed-icon breed12_1"></span><a href="http://www.dofus.com/fr/mmorpg/communaute/annuaires/pages-persos/747884800030-samsung">Samsung</a></td>                  <td class="ak-class">Pandawa</td>                  <td>200</td>                  <td>Many</td>                  <td class="ak-xp-24h">2 884 302 154</td>                  <td class="ak-xp-total">6 027 524 190</td> 

在这个例子中,我想在List<char>

中存储"Samsung"

我的索引"tag1"在进入while (result[tag1] != '<')循环之前处于正确的位置。它应该在看到"<"字符时停止。

我在代码中留下了调试,它确认在result[tag + 7]处有一个"<",但是当我运行它时,它显示为IndexOutOfRangeException

感谢阅读,如果我没有说清楚,请随时提问!

当遍历字符串时,IndexOutOfRangeException

在示例代码中,tag1在WHILE循环中达到Result的完整长度,但在循环中使用了tag1+7。当tag1出现在结果的7以内时。如果tag1+7大于result.Length,则会得到一个outtofrangeexception异常。您需要重新考虑您的逻辑或更改:

while(tag1 < result.Length)

(tag1 < result.Length-7)