java中equals()和startsWith()之间的区别

时间:2014-09-15 21:19:35

标签: java recursion equals startswith

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

1 个答案:

答案 0 :(得分:6)

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

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