Разница между равными () и начинается с () в 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
,