如何使用System.out.println在控制台中打印颜色?
如果您的终端支持它,您可以使用ANSI escape codes在输出中使用颜色。它通常适用于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";
然后,您可以根据需要引用这些参数。
例如,使用上述参数,你可以做以下的红色文字输出上所支持的终端:
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);
一个相当便携的方式是使用原始转义序列。见http://en.wikipedia.org/wiki/ANSI_escape_code
[编辑的user9999999于2017年2月20日]
Java不“处理代码”,这是真的,但Java的输出你告诉它来输出。 Windows控制台将ESC(chr(27))视为另一个字形(←),这不是Java的错。
这不起作用,因为Java IO层不会将它们转换为颜色。 System.out.println((char)27 +“[31; 1mERROR”+(char)27 +“[0m”只产生“[31; 1mERROR [0m”从Windows cmd.com作为可执行文件运行时.jar – simpleuser 2017-02-12 06:03:33
这个问题没有被标记为'windows'.Windows控制台从来没有符合ANSI的标准,我记得 – 2017-02-12 14:52:50
但问题是,java不处理代码,无论cmd.com的支持 – simpleuser 2017-02-20 17:31:44
我创建了一个名为JCDP库(的Java调试彩色打印机)。
对于Linux,它使用WhiteFang提到的ANSI转义码,但使用而不是代码对其进行了摘要,这更直观。
print("Hello World!", Attribute.BOLD, FColor.YELLOW, BColor.GREEN);
对于Windows它实际上包括JAnsi库,但在它创建了一个抽象层,保持对Linux产生的直观和简单的界面:当它变得容易。
此库许可证号为MIT License,因此请随时使用它。
还有一个错字,其中一个子弹拼写动态拼写。 – 2012-01-14 18:37:30
@DiAlex如果我能得到你的API副本,我很乐意。主页上的链接不再起作用,而是导致“404”。我可以在哪里下载? – 2015-01-05 06:09:50
解决了,谢谢你让我知道 – dialex 2017-12-29 09:17:42
您可以使用ANSI转义序列来执行此操作。实际上,我已经将这个类放在了Java中,供任何想要简单解决此问题的人使用。它允许在文本中使用自定义颜色代码。
https://gist.github.com/nathan-fiscaletti/9dc252d30b51df7d710a
实施例使用:
WITH背景颜色的颜色代码格式 - >:前景,背景:
颜色代码格式没有背景颜色 - >:前景,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");
列表0 注意 如果有人正在寻找一个快速解决方案,不要忘记使用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
}
,随意使用下面的辅助类:)
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");
Thanks @ whiteFang34 for the ANSI codes。
@ WhiteFang34你可以解释一下,如果它的颜色是黑色,至少在我的控制台中,RESET的用途是什么?这是否像一个默认或某事? – Boro 2011-04-23 08:31:25
@Boro:重置代码会关闭迄今为止设置的所有ANSI属性,这应该将控制台恢复为默认值。如果你不知道默认颜色,或者也使用其他一些属性,如背景颜色,字体样式等,这很有用。 – WhiteFang34 2011-04-23 08:38:10
jansi真的很棒!对于那些在Eclipse中开发的人,我可以推荐这个插件:http://mihai-nita.net/2013/06/03/eclipse-plugin-ansi-in-console/和一段代码来启用颜色,如果代码是不是在控制台中执行:'if(System.console()== null)System.setProperty(“jansi.passthrough”,“true”);' – 2014-04-13 19:51:16