为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

哆啦的时光机 2021-08-19 17:26:51
我有以下任务要做:如果字符串“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 时引起的。我怎样才能避免这种情况?谢谢你的问候:)
查看完整描述

1 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

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;


查看完整回答
反对 回复 2021-08-19
  • 1 回答
  • 0 关注
  • 155 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信