我有以下任务要做:
如果字符串“ cat”和“ dog”出现相同的数字,则返回true
给定字符串中的次数。
catDog(“ catdog”)→true catDog(“ catcat”)→false
catDog(“ 1cat1cadodog”)→true
我的代码:
public boolean catDog(String str) {
int catC = 0;
int dogC = 0;
if(str.length() < 3) return true;
for(int i = 0; i < str.length(); i++){
if(str.charAt(i) == 'd' && str.charAt(i+1) == 'o' && str.charAt(i+2) == 'g'){
dogC++;
}else if(str.charAt(i) == 'c' && str.charAt(i+1) == 'a' &&
str.charAt(i+2) == 't'){
catC++;
}
}
if(catC == dogC) return true;
return false;
}
但是对于
catDog("catxdogxdogxca")
→false
我得到了StringIndexOutOfBoundsException
。我知道它是由if子句引起的,当它尝试检查charAt(i+2)
是否等于t时。如何避免这种情况?谢谢问候:)
最佳答案
for(int i = 0; i < str.length(); i++){ // you problem lies here
if(str.charAt(i) == 'd' && str.charAt(i+1) == 'o' && str.charAt(i+2) == 'g')
您正在使用
i < str.length()
作为循环终止条件,但您正在使用str.charAt(i+1)
和str.charAt(i+2)
由于您需要访问
i+2
,因此应改为使用i < str.length() - 2
限制范围。for(int i = 0, len = str.length - 2; i < len; i++)
// avoid calculating each time by using len in initialising phase;