java中equals()和startsWith()之间的差异



我使用codingBat练习来练习递归,以自娱自乐。我在做这个练习:

给定一个字符串,递归计算小写"hi"在字符串中出现的次数,但不要计算前面有"x"的"hi"。

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()之间有区别吗?

首先确保字符串中至少有2个字符,然后测试前三个字符是否为xhi。如果字符串不够长,String.substr将抛出异常。

String.startsWith没有这个问题,当你检查一个2个字符的字符串是否以3个字符开头时,它不会抛出异常——它只返回false

最新更新