我使用codingBat练习为自己的娱乐练习递归。我正在做这个练习:
给定一个字符串,递归计算小写的次数" hi"出现在字符串中,但不计算" hi"有一个' x'在他们面前。
countHi2("ahixhi") → 1
countHi2("ahibhi") → 2
countHi2("xhixhi") → 0
我尝试执行此代码,但它不断抛出异常:
public int countHi2(String str){
if(str.length()<2){
return 0;
}
else if(str.substring(0,3).equals("xhi")){
return countHi2(str.substring(3));
}
else if(str.substring(0,2).equals("hi")){
return 1+countHi2(str.substring(2));
}
else{
return countHi2(str.substring(1));
}
}
我更改了substring()并等于startsWith()
else if(str.startsWith("xhi")){
return countHi2(str.substring(3));
现在效果很好,有人可以指出为什么我的第一个代码不正确吗? startsWith()和equals()之间有区别吗?
答案 0 :(得分:6)
首先确保字符串中至少包含2个字符,然后测试第一个三个字符是否为xhi
。如果字符串不够长,String.substr
会抛出异常。
String.startsWith
没有此问题,当您检查2个字符的字符串是否以3个字符开头时,它不会抛出异常 - 它只返回false
。