Почему код всегда возвращает true?

Пользователь должен ввести с консоли букву "а", чтобы высветилось "Вы ввели правильный символ, спасибо". В обратном случае уведомление должно быть таким: "Ошибка! Вы ввели неверный символ". Но даже при неправильных символах всегда высвечивается "Вы ввели правильный символ, спасибо".

import java.util.Scanner;
import java.util.regex.Pattern;
public class StreamReader {
    public static void main(String[] args){
        System.out.println("Введите а");
        Scanner scan = new Scanner(System.in);
        String s = scan.nextLine();
        System.out.println(s);
        String input = "a";
        boolean foo = Pattern.matches("a",input);
        if(foo){
            System.out.println("Вы ввели правильный символ, спасибо");
        }else{
            System.out.println("Ошибка! Вы ввели неверный символ");
        }


    }
}

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

Автор решения: Zhenyria

Смотрите внимательней.

String s = scan.nextLine();
System.out.println(s);
String input = "a";
boolean foo = Pattern.matches("a",input);

Строка пользователя считалась в переменную s. А вы сравниваете строку "a" и переменную input. Естественно, foo всегда будет true.

Именно поэтому переменные и методы должны называться нормально, а не абстрактными s, a, 123 и т.д. Если бы вы s переименовали в actualStr, а input в expectedStr, скорее всего никакой ошибки бы не было.

→ Ссылка