Дано: пользователь вводит строку, если в строке есть слово "Hello" вывести "Hi", если есть слово "Love" вывести "Love you too"

А если есть оба слова то вывести "Hi" "Love you too" "Hi, love you too". Выглядит примерно так:

Строка: "Hello, nice weather" Вывод программы: "Hi"

Строка: "I Love you" Вывод программы: "Love you too"

Строка: "Hello, I Love you" Вывод программы: "Hi" "Love you too" "Hi, Love you too"

Это все надо сделать с помощью if-else или цикла. У меня возникла проблема в последнем случае, так как если в введенном предложении совпадают оба слова, то надо вывести обе предыдущие фразы + ещё одну новую, и того в выводе в последнем случае должно вывести 3 фразы. Пример моего кода:

Scanner input = new Scanner(System.in);
    String phrase = input.nextLine();
    if (phrase.equals("Hello")) {
        System.out.println("Hi");
    } else if (phrase.equals("Love")) {
        System.out.println("Love you too");
    } else if ((phrase.equals("Hello")) && (phrase.equals("Love"))) {
        System.out.println("Hi, Love you too");
    }

Справиться с проблемой, помогло удаление else, спасибо!


Ответы (2 шт):

Автор решения: Эникейщик

Т.к. проверять нужно не на равенство, а не вхождение, то и использовать нужно не .equals(), а .contains().

→ Ссылка
Автор решения: rhino_rus

Используйте contains() для проверки вхождения слова в строку. Для того, чтобы условия не исключали друг друга и программа работала согласно Вашим ожиданиям, вместо "else if" стоит использовать просто "if".

Для игнорирования регистра можно изначально привести входную строку к нижнему регистру методом toLoverCase() и производить поиск именно в нижнем регистре.

Scanner input = new Scanner(System.in);
String phrase = input.nextLine().toLowerCase();

if(phrase.contains("hello")){
    System.out.println("Hi");
}
if(phrase.contains("love")){
    System.out.println("Love you too");
}
if(phrase.contains("hello") && phrase.contains("love")){
    System.out.println("Hi, Love you too");
}
→ Ссылка