Вывод с методом startWith и неясной подстрокой - PullRequest
0 голосов
/ 21 июня 2020

У меня проблемы с пониманием этого кода. Часть, которая меня смущает, - это вывод, в частности, вывод 3 и 5. Как 3-й из них может быть истинным, а 5-й - ложным. Я понял подстроки так: " оперирует "значениями после индекса. Следовательно, здесь он по-прежнему выводит true для «This», хотя он должен иметь индекс 0, и false для «текста». Почему так?

public class test {
    private static final String TEXT = "This is the text to be searched";

    private static boolean hasSubstring(String toFind, String findFrom) {
        if (findFrom.length() == 0) {
            return false;
        }
        if (findFrom.startsWith(toFind)) {
            return true;

        }
        return hasSubstring(toFind, findFrom.substring(1));
    }


    public static void main(String[] argv) {

        System.out.println(hasSubstring("text to", TEXT));
        System.out.println(hasSubstring("goo", TEXT));
        System.out.println(hasSubstring("This", TEXT));
        System.out.println(hasSubstring("searched", TEXT));
        System.out.println(hasSubstring("the  text", TEXT));
    }
}

Ответы [ 2 ]

0 голосов
/ 21 июня 2020

From Oracle defn,

String - subString

public String substring​(int beginIndex)

Возвращает строку, которая является подстрокой этой строки. Подстрока начинается с символа по указанному индексу и продолжается до конца этой строки. Примеры:

«unhappy» .substring (2) возвращает «happy»

«Harbison» .substring (3) возвращает «bison»

«пустота» .substring ( 9) возвращает "" (пустую строку)

Параметры: beginIndex - начальный индекс включительно.

Возвращает: указанную подстроку.

Выдает: IndexOutOfBoundsException - если beginIndex отрицательное значение или больше, чем длина этого объекта String.

Ссылка: https://docs.oracle.com/javase/9/docs/api/java/lang/String.html#substring

Следовательно, часть 3 истинна, как и ожидалось

0 голосов
/ 21 июня 2020

У вас есть двойной пробел в 5-м тестовом тексте

System.out.println( hasSubstring ("the  text", TEXT ));

Обновите его до одиночного пробела, как вы упомянули выше, он будет работать нормально, как вы ожидали.

System.out.println( hasSubstring ("the text", TEXT ));

Результаты следующие для меня с обновленным текстом:

true
false
true
true
true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...