use*_*948 -1 java recursion equals startswith
我正在使用codingBat练习练习递归以获得自己的娱乐.我正在做这个练习:
给定一个字符串,递归计算字符串中出现小写"hi"的次数,但是不计算在它们之前立即有"x"的"hi".
countHi2("ahixhi") ? 1
countHi2("ahibhi") ? 2
countHi2("xhixhi") ? 0
Run Code Online (Sandbox Code Playgroud)
我试图做这个代码,但它不断抛出超出范围的异常:
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));
}
}
Run Code Online (Sandbox Code Playgroud)
我更改了substring()并等于startsWith()
else if(str.startsWith("xhi")){
return countHi2(str.substring(3));
Run Code Online (Sandbox Code Playgroud)
现在效果很好,有人可以指出为什么我的第一个代码不正确吗?startsWith()和equals()之间有区别吗?
首先,确保字符串中至少包含2个字符,然后测试前三个字符是否为xhi.String.substr如果字符串不够长则抛出异常.
String.startsWith没有这个问题,当你检查2个字符的字符串是否以3个字符开头时它不会抛出异常 - 它只是返回false.