我怎样才能把空格“”作为一个字母?

时间:2013-02-06 20:57:19

标签: c# arrays string

我有一个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”可能恰好是最后一封信......

3 个答案:

答案 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'作为字符串的最后一个字符时,您会发生什么?

是否应该只设置next1next2?是应该将它们默认为null还是空字符串?

通常有两种选择。将for循环更改为从0到text.Length-2,以便您永远不会处理最后两个字符(这意味着next1next2不会更改从他们之前或之前的任何内容,或if内部,您需要检查i+1是否大于字符串的长度,如果是,则执行“其他内容”,然后对i+2执行相同操作{1}}。“其他东西”可以是任意数量的选项。

答案 2 :(得分:0)

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