如何使用System.out.println在控制台中打印颜色?

如何在控制台中打印颜色? 我想在处理器发送数据时用颜色显示数据,而在接收数据时用不同的颜色显示数据。

如果您的terminal支持它,您可以使用ANSI转义代码在输出中使用颜色。 它通常适用于Unix shell提示; 但是,它不适用于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"; 

然后,你可以根据需要引用这些。

例如,使用上述常量,可以在受支持的terminal上输出以下红色文本:

 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); 

我创build了一个名为JCDP ( Java Colored Debug Printer )的库。

对于Linux,它使用WhiteFang提到的ANSI转义代码,但是使用单词而不是代码更直观。 它变得如此简单:

 print("Hello World!", Attribute.BOLD, FColor.YELLOW, BColor.GREEN); 

对于Windows,它实际上包含JAnsi库,但在其上创build一个抽象层,保持为Linux创build的直观和简单的界面。

这个图书馆是根据麻省理工学院许可证授权的,因此可以随意使用它

看看JCDP的github存储库 。

一个相当便携的方式是使用原始转义序列。 请参阅http://en.wikipedia.org/wiki/ANSI_escape_code

[在2017-02-20上为user9999999编辑]

Java不会“处理代码”,这是真的,但Java会输出您告诉它输出的内容。 Windows控制台将ESC(chr(27))视为另一个字形(←),这不是Java的错。

你让我启动进入Windows。你欠我的兄弟

您可以使用ANSI转义序列来执行此操作。 实际上,我已经将这个类放在了Java中,任何想要简单的解决方法的人都可以使用它。 它允许在文本中使用自定义颜色代码。

https://gist.github.com/nathan-fiscaletti/9dc252d30b51df7d710a

使用示例:

颜色代码格式与背景颜色 – >:前景,背景:

颜色代码格式无背景色 – >:前景色,N:

重置颜色格式 – > [RC]

 String ansiColoredString = ColorCodes.parseColors("Hello, This :blue,n:is[RC] a :red,white:response[RC]."); 

要么

 String ansiColoredString = ColorCodes.RED + "Hello" + ColorCodes.WHITE + ", This is a " + ColorCodes.BLUE + "test"; 

这里是一个Java类中带有public static字段的颜色列表

用法

 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 } 

如果有人正在寻找一个快速的解决scheme,请随时使用下面的助手类:)

 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"); 

谢谢@ whiteFang34的ANSI代码。