Enums, вывод цветного текста

Создайте перечисление цветов для вывода цветного текста в консоль.

public enum Color {
    DEFAULT("\033[0m"),
    RED("\033[91m"),
    YELLOW("\033[93m"),
    GREEN("\033[92m");

    private final String hue; // Хранение цвета

    private Color(String hue) {
        this.hue = hue;
    }

    public void out(Object o) {
        System.out.println(hue + o); // Окрашивание текста
    }
}
public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.print("Enter text: ");
    String text = sc.next();
    for (Color color : Color.values()) {
        if (text.equalsIgnoreCase(color.name())) {
            color.out(color.name() + ": " + text);
        }
    }
}

Если пользователь вводит название цвета, например, red, то текст окрашивается в красный цвет. Сейчас цикл срабатывает один раз, нужно, чтобы после ввода цвета, весь текст который будет введен пользователем выводился в этом цвете, пока не будет указан другой текст.

Как сделать чтоб цикл срабатывал не один раз и текст выводился в цвете пока не будет введен другой текст?

скриншот


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

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

Сделайте бесконечный цикл while, тогда программа не завершится до тех пор, пока ее кто-нибудь не прибьет:

public static void main(String[] args) {
    while (true) {
        ...
    }
}

Чтобы остановить такую программу в Intellij IDEA, нужно нажать на красный квадратик «стоп». Если работаете в терминале, то Ctrl + C.

Далее, чтобы весь текст выводить в цвете, заведем статическую переменную current, в которой будем хранить последний выбранный цвет. Вместо System.out везде будем использовать current.out:

class Main {

    private static Color current = Color.DEFAULT;

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (true) {
            current.out("Enter text: ");
            String text = scanner.next();
            current = Color.of(text);
            current.out(...);
        }
    }
}

Цикл по поиску цвета вынесен в статический метод of:

public enum Color {

    ...

    public static Color of(String text) {
        for (Color color : Color.values()) {
            if (text.equalsIgnoreCase(color.name())) {
                return color;
            }
        }
        return Color.DEFAULT;
    }
}
→ Ссылка