Разница между равными () и начинается с () в Java

Я практикую рекурсию для собственного развлечения, используя упражнения 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));
    }
}

Я изменил подстроку () и равняется StartWith()

else if(str.startsWith("xhi")){
            return countHi2(str.substring(3));

И теперь работает отлично, может кто-нибудь указать, почему мой первый код был неверным? Есть ли разница между startWith() и equals()?

1 ответ

Сначала убедитесь, что строка содержит не менее 2 символов, а затем проверьте, что первые три символа xhi, String.substr выдает исключение, если строка недостаточно длинная.

String.startsWith не имеет этой проблемы, он не выдает исключение, когда вы проверяете, начинается ли строка из 2 символов с 3 символов - он просто возвращает false,

Другие вопросы по тегам