Второй оператор возврата, вложенный в оператор if

Мне интересно, что return str.substring(1,4).equals("bad"); делает здесь, в else if(len>=4). Я думаю, что оператор if является защитным предложением, но я не на 100%. Могу я получить объяснение, что именно здесь происходит? Как это читать, чтобы вывести «false»?

Для заданной строки верните true, если «плохой» появляется, начиная с индекса 0 или 1 в строке, например, с «badxxx» или «xbadxx», но не с «xxbadxx». Строка может быть любой длины, включая 0. Примечание: используйте .equals() для сравнения двух строк.

hasBad("badxx") → истина

hasBad("xbadxx") → истина

hasBad("xxbadxx") → ложь

public boolean hasBad(String str)
{
    int len = str.length();
    if(len == 3 && str.equals("bad"))
        return true;
    else if(len >= 4)
    {
        if(str.substring(0, 3).equals("bad"))
            return true;
        return str.substring(1, 4).equals("bad");
    }
    else
        return false;
}

person M. Nelson    schedule 21.04.2016    source источник
comment
Вы хотите знать, что делает return str.substring(1, 4).equals("bad");?   -  person MeetTitan    schedule 21.04.2016
comment
Если вы понятия не имеете, что делает этот код, почему бы вам не спросить того, кто его написал, почему код написан именно так. примечание: это то же самое, что и return str.matches(".?bad.*");   -  person Peter Lawrey    schedule 21.04.2016


Ответы (2)


if(str.substring(0, 3).equals("bad")) это самая легкая часть. «Верните true, если «плохой» — это начало String».

return str.substring(1, 4).equals("bad") по сути означает: «Возвратить true, если после первого символа стоит «плохой», и false в противном случае». Это в основном ярлык

if(str.substring(1, 4).equals("bad")) return true;
else return false; 

Поскольку if уже оценивает логическое значение (то, что находится внутри if, приводит к логическому значению), нет причин указывать ему возвращать «истина, если истина, иначе ложь», вы можете просто вернуть логическое значение напрямую.

person Zircon    schedule 21.04.2016
comment
И бум взрывает динамит. Спасибо за объяснение, имеет смысл. - person M. Nelson; 23.04.2016

вы можете попробовать это и по-другому, как показано ниже

public static boolean hasBad(String str) {
    for (int i = 0; i < str.length() - 1; i++) {

        if (str.length()>=3 && str.charAt(0) == 'b' || str.charAt(1) == 'b' ) {

            if (str.substring(i).contains("bad")) {

                return true;
            }
        }
    }
    return false;
}
person Kumar Niraj    schedule 18.01.2020