System.out.println을 사용하여 콘솔에서 색상을 인쇄하는 방법은 무엇입니까?
콘솔에서 컬러를 인쇄하려면 어떻게해야합니까? 프로세서가 데이터를 보낼 때 데이터를 컬러로 표시하고 데이터를 수신 할 때 다른 컬러로 데이터를 표시하고 싶습니다.
터미널에서 지원하는 경우 ANSI 이스케이프 코드 를 사용하여 출력에 색상을 사용할 수 있습니다 . 일반적으로 유닉스 쉘 프롬프트에서 작동합니다. 그러나 Windows 명령 프롬프트에서는 작동하지 않습니다 (Cygwin에서는 작동하지만). 예를 들어 색상에 대해 다음과 같은 상수를 정의 할 수 있습니다.
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";
그런 다음 필요에 따라 참조 할 수 있습니다.
예를 들어, 위 상수를 사용하면 지원되는 터미널에서 다음과 같은 빨간색 텍스트 출력을 만들 수 있습니다.
System.out.println(ANSI_RED + "This text is red!" + ANSI_RESET);
업데이트 : Jansi 라이브러리 를 확인하십시오 . API를 제공하고 JNI를 사용하는 Windows를 지원합니다. 아직 시도하지 않았습니다. 그러나 유망 해 보인다.
업데이트 2 : 또한 텍스트의 배경색을 다른 색으로 변경하려면 다음을 시도하십시오.
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";
예를 들어 :
System.out.println(ANSI_GREEN_BACKGROUND + "This text has a green background but default text!" + ANSI_RESET);
System.out.println(ANSI_RED + "This text has red text but a default background!" + ANSI_RESET);
System.out.println(ANSI_GREEN_BACKGROUND + ANSI_RED + "This text has a green background and red text!" + ANSI_RESET);
다음은 public static
필드 가있는 Java 클래스의 색상 목록입니다.
용법
System.out.println(ConsoleColors.RED + "RED COLORED" +
ConsoleColors.RESET + " NORMAL");
참고RESET
효과가 지워지지 않으면 효과가 유지되므로 인쇄 후 애프터 를 사용하는 것을 잊지 마십시오.
public class ConsoleColors {
// Reset
public static final String RESET = "\033[0m"; // Text Reset
// Regular Colors
public static final String BLACK = "\033[0;30m"; // BLACK
public static final String RED = "\033[0;31m"; // RED
public static final String GREEN = "\033[0;32m"; // GREEN
public static final String YELLOW = "\033[0;33m"; // YELLOW
public static final String BLUE = "\033[0;34m"; // BLUE
public static final String PURPLE = "\033[0;35m"; // PURPLE
public static final String CYAN = "\033[0;36m"; // CYAN
public static final String WHITE = "\033[0;37m"; // WHITE
// Bold
public static final String BLACK_BOLD = "\033[1;30m"; // BLACK
public static final String RED_BOLD = "\033[1;31m"; // RED
public static final String GREEN_BOLD = "\033[1;32m"; // GREEN
public static final String YELLOW_BOLD = "\033[1;33m"; // YELLOW
public static final String BLUE_BOLD = "\033[1;34m"; // BLUE
public static final String PURPLE_BOLD = "\033[1;35m"; // PURPLE
public static final String CYAN_BOLD = "\033[1;36m"; // CYAN
public static final String WHITE_BOLD = "\033[1;37m"; // WHITE
// Underline
public static final String BLACK_UNDERLINED = "\033[4;30m"; // BLACK
public static final String RED_UNDERLINED = "\033[4;31m"; // RED
public static final String GREEN_UNDERLINED = "\033[4;32m"; // GREEN
public static final String YELLOW_UNDERLINED = "\033[4;33m"; // YELLOW
public static final String BLUE_UNDERLINED = "\033[4;34m"; // BLUE
public static final String PURPLE_UNDERLINED = "\033[4;35m"; // PURPLE
public static final String CYAN_UNDERLINED = "\033[4;36m"; // CYAN
public static final String WHITE_UNDERLINED = "\033[4;37m"; // WHITE
// Background
public static final String BLACK_BACKGROUND = "\033[40m"; // BLACK
public static final String RED_BACKGROUND = "\033[41m"; // RED
public static final String GREEN_BACKGROUND = "\033[42m"; // GREEN
public static final String YELLOW_BACKGROUND = "\033[43m"; // YELLOW
public static final String BLUE_BACKGROUND = "\033[44m"; // BLUE
public static final String PURPLE_BACKGROUND = "\033[45m"; // PURPLE
public static final String CYAN_BACKGROUND = "\033[46m"; // CYAN
public static final String WHITE_BACKGROUND = "\033[47m"; // WHITE
// High Intensity
public static final String BLACK_BRIGHT = "\033[0;90m"; // BLACK
public static final String RED_BRIGHT = "\033[0;91m"; // RED
public static final String GREEN_BRIGHT = "\033[0;92m"; // GREEN
public static final String YELLOW_BRIGHT = "\033[0;93m"; // YELLOW
public static final String BLUE_BRIGHT = "\033[0;94m"; // BLUE
public static final String PURPLE_BRIGHT = "\033[0;95m"; // PURPLE
public static final String CYAN_BRIGHT = "\033[0;96m"; // CYAN
public static final String WHITE_BRIGHT = "\033[0;97m"; // WHITE
// Bold High Intensity
public static final String BLACK_BOLD_BRIGHT = "\033[1;90m"; // BLACK
public static final String RED_BOLD_BRIGHT = "\033[1;91m"; // RED
public static final String GREEN_BOLD_BRIGHT = "\033[1;92m"; // GREEN
public static final String YELLOW_BOLD_BRIGHT = "\033[1;93m";// YELLOW
public static final String BLUE_BOLD_BRIGHT = "\033[1;94m"; // BLUE
public static final String PURPLE_BOLD_BRIGHT = "\033[1;95m";// PURPLE
public static final String CYAN_BOLD_BRIGHT = "\033[1;96m"; // CYAN
public static final String WHITE_BOLD_BRIGHT = "\033[1;97m"; // WHITE
// High Intensity backgrounds
public static final String BLACK_BACKGROUND_BRIGHT = "\033[0;100m";// BLACK
public static final String RED_BACKGROUND_BRIGHT = "\033[0;101m";// RED
public static final String GREEN_BACKGROUND_BRIGHT = "\033[0;102m";// GREEN
public static final String YELLOW_BACKGROUND_BRIGHT = "\033[0;103m";// YELLOW
public static final String BLUE_BACKGROUND_BRIGHT = "\033[0;104m";// BLUE
public static final String PURPLE_BACKGROUND_BRIGHT = "\033[0;105m"; // PURPLE
public static final String CYAN_BACKGROUND_BRIGHT = "\033[0;106m"; // CYAN
public static final String WHITE_BACKGROUND_BRIGHT = "\033[0;107m"; // WHITE
}
JCDP ( Java Colored Debug Printer ) 라는 라이브러리를 만들었습니다 .
Linux의 경우 WhiteFang에서 언급 한 ANSI 이스케이프 코드를 사용하지만 훨씬 직관적 인 코드 대신 단어를 사용하여 추상화합니다 . 다음과 같이 쉬워집니다.
print("Hello World!", Attribute.BOLD, FColor.YELLOW, BColor.GREEN);
Windows의 경우 JAnsi 에 의존 하지만 위에 표시된 직관적이고 간단한 API를 유지하면서 추상화 계층을 작성합니다.
JCDP의 github repository에 몇 가지 예가 있습니다.
public enum Color {
//颜色结尾字符串,重置颜色的
RESET("\033[0m"),
// Regular Colors 普通颜色,不带加粗,背景色等
BLACK("\033[0;30m"), // BLACK
RED("\033[0;31m"), // RED
GREEN("\033[0;32m"), // GREEN
YELLOW("\033[0;33m"), // YELLOW
BLUE("\033[0;34m"), // BLUE
MAGENTA("\033[0;35m"), // MAGENTA
CYAN("\033[0;36m"), // CYAN
WHITE("\033[0;37m"), // WHITE
// Bold
BLACK_BOLD("\033[1;30m"), // BLACK
RED_BOLD("\033[1;31m"), // RED
GREEN_BOLD("\033[1;32m"), // GREEN
YELLOW_BOLD("\033[1;33m"), // YELLOW
BLUE_BOLD("\033[1;34m"), // BLUE
MAGENTA_BOLD("\033[1;35m"), // MAGENTA
CYAN_BOLD("\033[1;36m"), // CYAN
WHITE_BOLD("\033[1;37m"), // WHITE
// Underline
BLACK_UNDERLINED("\033[4;30m"), // BLACK
RED_UNDERLINED("\033[4;31m"), // RED
GREEN_UNDERLINED("\033[4;32m"), // GREEN
YELLOW_UNDERLINED("\033[4;33m"), // YELLOW
BLUE_UNDERLINED("\033[4;34m"), // BLUE
MAGENTA_UNDERLINED("\033[4;35m"), // MAGENTA
CYAN_UNDERLINED("\033[4;36m"), // CYAN
WHITE_UNDERLINED("\033[4;37m"), // WHITE
// Background
BLACK_BACKGROUND("\033[40m"), // BLACK
RED_BACKGROUND("\033[41m"), // RED
GREEN_BACKGROUND("\033[42m"), // GREEN
YELLOW_BACKGROUND("\033[43m"), // YELLOW
BLUE_BACKGROUND("\033[44m"), // BLUE
MAGENTA_BACKGROUND("\033[45m"), // MAGENTA
CYAN_BACKGROUND("\033[46m"), // CYAN
WHITE_BACKGROUND("\033[47m"), // WHITE
// High Intensity
BLACK_BRIGHT("\033[0;90m"), // BLACK
RED_BRIGHT("\033[0;91m"), // RED
GREEN_BRIGHT("\033[0;92m"), // GREEN
YELLOW_BRIGHT("\033[0;93m"), // YELLOW
BLUE_BRIGHT("\033[0;94m"), // BLUE
MAGENTA_BRIGHT("\033[0;95m"), // MAGENTA
CYAN_BRIGHT("\033[0;96m"), // CYAN
WHITE_BRIGHT("\033[0;97m"), // WHITE
// Bold High Intensity
BLACK_BOLD_BRIGHT("\033[1;90m"), // BLACK
RED_BOLD_BRIGHT("\033[1;91m"), // RED
GREEN_BOLD_BRIGHT("\033[1;92m"), // GREEN
YELLOW_BOLD_BRIGHT("\033[1;93m"), // YELLOW
BLUE_BOLD_BRIGHT("\033[1;94m"), // BLUE
MAGENTA_BOLD_BRIGHT("\033[1;95m"), // MAGENTA
CYAN_BOLD_BRIGHT("\033[1;96m"), // CYAN
WHITE_BOLD_BRIGHT("\033[1;97m"), // WHITE
// High Intensity backgrounds
BLACK_BACKGROUND_BRIGHT("\033[0;100m"), // BLACK
RED_BACKGROUND_BRIGHT("\033[0;101m"), // RED
GREEN_BACKGROUND_BRIGHT("\033[0;102m"), // GREEN
YELLOW_BACKGROUND_BRIGHT("\033[0;103m"), // YELLOW
BLUE_BACKGROUND_BRIGHT("\033[0;104m"), // BLUE
MAGENTA_BACKGROUND_BRIGHT("\033[0;105m"), // MAGENTA
CYAN_BACKGROUND_BRIGHT("\033[0;106m"), // CYAN
WHITE_BACKGROUND_BRIGHT("\033[0;107m"); // WHITE
private final String code;
Color(String code) {
this.code = code;
}
@Override
public String toString() {
return code;
}
}
System.out.print(Color.BLACK_BOLD);
System.out.println("111111111aaaaaaaaaaaaaaaa==============");
System.out.print(Color.RESET);
System.out.print(Color.BLUE_BACKGROUND);
System.out.print(Color.YELLOW); //设置前景色 为YELLOW
System.out.println("111111111aaaaaaaaaaaaaaaa==============马哥私房菜");
System.out.println("111111111aaaaaaaaaaaaaaaa==============马哥私房菜");
System.out.println("111111111aaaaaaaaaaaaaaaa==============马哥私房菜");
System.out.println("111111111aaaaaaaaaaaaaaaa==============马哥私房菜");
System.out.print(Color.RESET);
이를 수행하는 상당히 이식 가능한 방법은 원시 이스케이프 시퀀스를 사용하는 것입니다. http://en.wikipedia.org/wiki/ANSI_escape_code를 참조하십시오
[2017-02-20의 user9999999에 대해 편집 됨]
Java는 "코드를 처리"하지 않지만, 사실 Java는 사용자가 지시 한 내용을 출력하도록 출력합니다. Windows 콘솔이 ESC (chr (27))를 다른 글리프 (←)로 취급한다는 것은 Java의 잘못이 아닙니다.
ANSI 이스케이프 시퀀스를 사용하여이 작업을 수행 할 수 있습니다. 실제로이 간단한 해결 방법을 원하는 사람을 위해이 클래스를 Java로 작성했습니다. 단순한 색상 코드 이상의 것을 허용합니다.
https://gist.github.com/nathan-fiscaletti/9dc252d30b51df7d710a
( https://github.com/nathan-fiscaletti/ansi-util에서 제공 )
사용 예 :
StringBuilder sb = new StringBuilder();
System.out.println(
sb.raw("Hello, ")
.underline("John Doe")
.resetUnderline()
.raw(". ")
.raw("This is ")
.color16(StringBuilder.Color16.FG_RED, "red")
.raw(".")
);
누구나 빠른 솔루션을 찾고 있다면 다음 도우미 클래스를 자유롭게 사용하십시오. :)
public class Log {
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";
//info
public static void i(String className, String message) {
System.out.println(ANSI_GREEN + className + " : " + message + ANSI_RESET);
}
//error
public static void e(String className, String message) {
System.out.println(ANSI_RED + className + " : " + message + ANSI_RESET);
}
//debug
public static void d(String className, String message) {
System.out.println(ANSI_BLUE + className + " : " + message + ANSI_RESET);
}
//warning
public static void w(String className, String message) {
System.out.println(ANSI_YELLOW + className + " : " + message + ANSI_RESET);
}
}
용법:
Log.i(TAG,"This is an info message");
Log.e(TAG,"This is an error message");
Log.w(TAG,"This is a warning message");
Log.d(TAG,"This is a debug message");
ANSI 코드에 대해 @ whiteFang34에게 감사합니다.
콘솔 텍스트를 색칠하는 가장 좋은 방법은 ANSI 이스케이프 코드 를 사용하는 것 입니다. ANSI 이스케이프 코드는 텍스트 색상 외에도 배경 색상, 장식 등을 허용합니다.
유닉스
springboot를 사용하는 경우 텍스트 색상 지정을위한 특정 열거 형이 있습니다. org.springframework.boot.ansi.AnsiColor
Jansi 라이브러리는 조금 더 고급이며 (모든 ANSI 이스케이프 코드 함수를 사용할 수 있음) API를 제공하며 JNA를 사용 하는 Windows 를 지원합니다 .
그렇지 않으면 다른 응답과 같이 자신의 색상을 수동으로 정의 할 수 있습니다.
윈도우 10
Windows 10 (빌드 10.0.10586-2015 년 11 월부터)은 ANSI 이스케이프 코드 ( MSDN 문서 )를 지원 하지만 기본적으로 활성화되어 있지 않습니다. 사용하려면 다음을 수행하십시오.
- 와 SetConsoleMode의 API 를 사용
ENABLE_VIRTUAL_TERMINAL_PROCESSING (0x0400)
플래그. Jansi는이 옵션을 사용합니다. - SetConsoleMode API를 사용하지 않으면
HKEY_CURRENT_USER\Console\VirtualTerminalLevel
dword를 작성 하여 글로벌 레지스트리 키를 변경하고 ANSI 처리를 위해 0 또는 1로 설정할 수 있습니다."VirtualTerminalLevel"=dword:00000001
Windows 10 이전
Windows 콘솔은 ANSI 색상을 지원하지 않습니다. 그러나 콘솔을 사용하는 것이 가능합니다.
Kotlin (Java와 완벽하게 작동)을 사용하면 다음과 같은 열거 형을 만들 수 있습니다.
enum class AnsiColor(private val colorNumber: Byte) {
BLACK(0), RED(1), GREEN(2), YELLOW(3), BLUE(4), MAGENTA(5), CYAN(6), WHITE(7);
companion object {
private const val prefix = "\u001B"
const val RESET = "$prefix[0m"
private val isCompatible = "win" !in System.getProperty("os.name").toLowerCase()
}
val regular get() = if (isCompatible) "$prefix[0;3${colorNumber}m" else ""
val bold get() = if (isCompatible) "$prefix[1;3${colorNumber}m" else ""
val underline get() = if (isCompatible) "$prefix[4;3${colorNumber}m" else ""
val background get() = if (isCompatible) "$prefix[4${colorNumber}m" else ""
val highIntensity get() = if (isCompatible) "$prefix[0;9${colorNumber}m" else ""
val boldHighIntensity get() = if (isCompatible) "$prefix[1;9${colorNumber}m" else ""
val backgroundHighIntensity get() = if (isCompatible) "$prefix[0;10${colorNumber}m" else ""
}
그런 다음 사용은 다음과 같습니다 (아래 코드는 모든 색상에 대해 다른 스타일을 보여줍니다)
val sampleText = "This is a sample text"
enumValues<AnsiColor>().forEach { ansiColor ->
println("${ansiColor.regular}$sampleText${AnsiColor.RESET}")
println("${ansiColor.bold}$sampleText${AnsiColor.RESET}")
println("${ansiColor.underline}$sampleText${AnsiColor.RESET}")
println("${ansiColor.background}$sampleText${AnsiColor.RESET}")
println("${ansiColor.highIntensity}$sampleText${AnsiColor.RESET}")
println("${ansiColor.boldHighIntensity}$sampleText${AnsiColor.RESET}")
println("${ansiColor.backgroundHighIntensity}$sampleText${AnsiColor.RESET}")
}
이러한 ANSI 코드가 지원되지 않는 Windows에서 실행중인 경우 isCompatible
검사는 코드를 빈 문자열로 바꾸어 문제를 방지합니다.
참고 URL : https://stackoverflow.com/questions/5762491/how-to-print-color-in-console-using-system-out-println
'Programing' 카테고리의 다른 글
jQuery로 테이블 행을 제거하는 가장 좋은 방법은 무엇입니까? (0) | 2020.03.21 |
---|---|
개체가 약속인지 어떻게 알 수 있습니까? (0) | 2020.03.21 |
페이지와 목차를 만들기위한 마크 다운? (0) | 2020.03.21 |
Swift에서 iOS에 UUID 생성 (0) | 2020.03.21 |
Long을 정수로 변환 (0) | 2020.03.21 |