1

我有一个text"The camel is big",然后我寻找字母"e",然后我想将接下来的两个字母存储在字符串变量中,所以我next1将获得价值"l"next2存储空间" ";但是编译器会抛出一个异常,并显示Index 超出了数组的范围。这是代码:

for (int i = 0; i < text.Length; i++)
{
    if (text[i]=='e' || text[i]=='E')
    {
        next1 = text[i + 1].ToString();
        next2 = text[i + 2].ToString(); //this throws exception...
    }
}

我理解感谢您的评论,是的,它发生i在最后一点,它试图获取下一个不存在的字母。好吧,我该如何防止它,我的文字很大,有时“e”可能恰好是最后一个字母......

4

3 回答 3

3

当您在字符串中最后一个字符之前的索引上有or时,第二行 ( text[i + 2]) 将引发错误。如果是最后一个字符,第一行 ( ) 将抛出。eEtext[i + 1]

您提供的示例字符串不会引发异常。

到那时,text[i + 2]确实会越界字符串(字符数组)。

您需要在此之前循环到:

for (int i = 0; i < text.Length - 2; i++)
于 2013-02-06T20:58:17.410 回答
3

'e'那么,当字符串的最后一个字符为 an 时,您期望会发生什么?

它应该根本不设置next1next2?它应该将它们默认为null还是空字符串?

一般有两种选择。将循环更改为for从 0 变为text.Length-2,这样您就永远不会处理最后两个字符(这意味着next1并且next2不会从以前的任何内容更改,或者在您的内部if您需要检查是否i+1大于长度如果是字符串,则执行“其他内容”,然后对 . 执行相同操作i+2。“其他内容”可以是任意数量的选项。

于 2013-02-06T21:00:54.857 回答
0

当 i 是最后一个或几乎最后一个元素时,您尝试访问数组外的元素!
尝试将循环中的交互减少 2 :)

于 2013-02-06T21:01:03.130 回答