Im практикует рекурсию для собственного развлечения с помощью упражнений codingBat. Я делаю это упражнение:Разница между equals() и startsWith() в java
Учитывая строку, вычислить рекурсивно количество строк в нижнем регистре «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));
}
}
Я изменил подстроку() и равна StartsWith()
else if(str.startsWith("xhi")){
return countHi2(str.substring(3));
И теперь работает отлично, может кто-нибудь указать, почему мой первый код не был правильным? Есть ли разница между startsWith() и equals()?
Ваше имя начинается с '' пользователя ''? Является ли он равным '' notuser''? –
Перед выполнением подстроки (0, 3) вы должны убедиться, что строка имеет не менее 3 символов. Это то, что начинается с хорошим, и что ваш код этого не делает. Если вы прочитали трассировку стека исключения, вы бы заметили, что исключение не было выбрано equals(), а подстрокой(). Трассировка стека исключений также указывает вам, в какой строке кода генерируется исключение. Не считая трассировку стека, это ваша самая большая ошибка. –
Я просто спрошу, так как вы не указали, что вам нужно использовать 'equals или startsWith' или что-то вроде' contains' valid также потому, что я бы сказал, что содержимое будет немного проще и надежнее для других примеров строк; эта реализация, похоже, предполагает, что тестовая строка всегда находится в шаблоне * hi * hi и т. д. – Culyx