В Java для изменения цвета символов (а также цвета фона, стиля шрифта и т.п.) можно использовать ANSI-последовательности (англ.), если терминал их поддерживает.
Пример кода для выбора цвета:
public class Main
{
public static final String ANSI_RESET = "\u001B[0m";
public static final String ANSI_BLACK = "\u001B[30m";
public static final String ANSI_RED = "\u001B[31m";
public static final String ANSI_GREEN = "\u001B[32m";
public static final String ANSI_YELLOW = "\u001B[33m";
public static final String ANSI_BLUE = "\u001B[34m";
public static final String ANSI_PURPLE = "\u001B[35m";
public static final String ANSI_CYAN = "\u001B[36m";
public static final String ANSI_WHITE = "\u001B[37m";
public static final String ANSI_BLACK_BACKGROUND = "\u001B[40m";
public static final String ANSI_RED_BACKGROUND = "\u001B[41m";
public static final String ANSI_GREEN_BACKGROUND = "\u001B[42m";
public static final String ANSI_YELLOW_BACKGROUND = "\u001B[43m";
public static final String ANSI_BLUE_BACKGROUND = "\u001B[44m";
public static final String ANSI_PURPLE_BACKGROUND = "\u001B[45m";
public static final String ANSI_CYAN_BACKGROUND = "\u001B[46m";
public static final String ANSI_WHITE_BACKGROUND = "\u001B[47m";
public static void outRed(String msg) {
out(ANSI_RED, msg);
}
public static void outGreen(String msg) {
out(ANSI_GREEN, msg);
}
public static void outYellow(String msg) {
out(ANSI_YELLOW, msg);
}
private static void out(String color, String msg) {
out(color, "", msg);
}
private static void out(String color, String bgColor, String msg) {
System.out.println(color + bgColor + msg + ANSI_RESET);
}
public static void main(String[] args) {
out(ANSI_WHITE, ANSI_RED_BACKGROUND, " RED ");
outYellow(" YELLOW ");
outGreen (" GREEN ");
}
}
На несовместимом терминале эти последовательности не будут корректно обрабатываться:
Другие варианты реализации (через enum
, с дополнительными кодами для изменения шрифта и т.п.) можно найти по ссылке на основном StackOverflow (англ.): How to print color in console using System.out.println
?