我有一个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”可能恰好是最后一封信......
答案 0 :(得分:3)
如果字符串中的最后一个字符前面的索引上有text[i + 2]
或e
,则第二行(E
)将抛出错误。如果第一行(text[i + 1]
)是 last 字符,则会抛出该行。{/ p>
您提供的示例字符串不会引发异常。
此时,text[i + 2]
确实超出了字符串(字符数组)的范围。
你需要在发生之前循环:
for (int i = 0; i < text.Length - 2; i++)
答案 1 :(得分:3)
那么当'e'
作为字符串的最后一个字符时,您会发生什么?
是否应该只设置next1
和next2
?是应该将它们默认为null
还是空字符串?
通常有两种选择。将for
循环更改为从0到text.Length-2
,以便您永远不会处理最后两个字符(这意味着next1
和next2
不会更改从他们之前或之前的任何内容,或if
内部,您需要检查i+1
是否大于字符串的长度,如果是,则执行“其他内容”,然后对i+2
执行相同操作{1}}。“其他东西”可以是任意数量的选项。
答案 2 :(得分:0)
当我是最后一个或几乎最后一个元素时,你试图访问数组中的元素!!
尝试将循环中的交互减少2:)