我有一个像a;sfjdksldrkdjlfdrarakdfkjra
这样的字符串。
我想计算多少次" ra"重复上面的字符串。
我尝试使用不同的方法,但我失败了。
string str = "rajdlkfja;ra;jdfsraralj;fra";
int count = 0;
char[] ch = str.ToCharArray();
for(int i = 0; i <= ch.Length; i++)
{
if(ch[i] == 'r' && ch[i + 1] == 'a')
{
count++;
}
}
Console.WriteLine(count);
答案 0 :(得分:3)
问题在于你有IndexOutOfRangeException
:请记住C#中的数组是基于零的,这意味着具有n
元素的数组具有从0
到{{1}的指示(当我们人类计算时,我们自然会从一个开始,所以5个梨是1个,2个,3个,4个和5个梨,但在c#数组中,我们将它们视为0,1,2,3和4)。
因此,一般来说,当你想循环一个数组时,拇指的规则是:n - 1
。
现在,这会解决您的问题吗?不,你还有一个for (int i = 0; i < array.Length; i++) //< instead of <=
。为什么?问题是当IndexOutOfRangeException
达到最后一个有效值i
时,您正在Length - 1
搜索a
ch[ch.Length - 1 + 1]
,ch[ch.Length]
我们现在知道这是错误的。< / p>
但等一下!为什么我们从字符串的最后一个字符开始搜索两个字符的模式?您不可能在该位置找到匹配项,因为没有字符串可以匹配模式中的第二个字符!我们不应该在那里看!好的,只循环到字符串的前一个字符:for (int i = 0; i < ch.Length - 1; i++)
。
现在你做完了,事情应该运转得很好。