Java如何避免字符串索引越界

Java如何避免字符串索引越界,java,string,stringindexoutofbounds,Java,String,Stringindexoutofbounds,我有以下任务要做: 如果字符串“cat”和“dog”显示相同数量的 给定字符串中的时间 猫狗(“猫狗”)→ 真正的猫猫(“猫猫”)→ 假的 猫狗(“猫狗”)→ 真的 我的代码: 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

我有以下任务要做:

如果字符串“cat”和“dog”显示相同数量的 给定字符串中的时间

猫狗(“猫狗”)→ 真正的猫猫(“猫猫”)→ 假的 猫狗(“猫狗”)→ 真的

我的代码:

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(String str){
int-catC=0;
int dogC=0;
if(str.length()<3)返回true;
对于(int i=0;i
但是对于猫狗(“catxdogxdogxca”)
false
我得到了一个
StringIndexOutOfBoundsException
。我知道它是由if子句引起的,当它试图检查
字符(I+2)
是否等于t时。我怎样才能避免这种情况?
感谢:)

逻辑有问题,条件语句试图访问超出字符串大小的字符


输入:catxdogxdogxca末尾有ca,这就是执行else块的原因,该块尝试在输入中不存在的i+3处获取字符。这就是为什么您会看到java.lang.StringIndexOutOfBoundsException

逻辑有问题,条件语句试图访问超出字符串大小的字符


输入:catxdogxdogxca末尾有ca,这就是执行else块的原因,该块尝试在输入中不存在的i+3处获取字符。这就是为什么您会看到java.lang.StringIndexOutOfBoundsException

这对我来说很简单,我自己通过向两个if子句添加str.length()>=I+3&&解决了这个问题,但您的方法要好得多。@user8953265如果解决了您的问题,我会进一步更新解决方案。请将其标记为答案,以备日后参考。(这对我来说很简单,xD我通过向两个if子句添加str.length()>=I+3&&解决了这个问题,但您的方法要好得多。@user8953265如果解决了您的问题,我会进一步更新解决方案。请将其标记为答案,以备日后参考。(
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')
for(int i = 0, len = str.length - 2; i < len; i++) 
// avoid calculating each time by using len in initialising phase;