#1 楼
如果您的终端支持,则可以使用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";
然后,可以根据需要引用这些常量。
例如,使用上述常量,您可以在支持的终端上输出以下红色文本:
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);
评论
@ WhiteFang34请问至少在我的控制台中,如果RESET的颜色为BLACK,它的用途是什么?是默认值还是某物?
– Boro
2011年4月23日在8:31
@Boro:重置代码将关闭到目前为止设置的所有ANSI属性,这将使控制台恢复为其默认值。如果您不知道默认颜色,或者还使用其他一些属性(例如背景颜色,字体样式等),这将非常有用。
–WhiteFang34
2011年4月23日在8:38
jansi真的很棒!对于那些使用eclipse开发的人,我可以推荐这个插件:mihai-nita.net/2013/06/03/eclipse-plugin-ansi-in-sole和不错的代码段,以在未执行代码时启用颜色在控制台中:if(System.console()== null)System.setProperty(“ jansi.passthrough”,“ true”);
–丹尼·卢(Danny Lo)
2014年4月13日在19:51
@PankajNimgade,再次阅读答案,您可能会注意到这一点:但是,它不适用于Windows命令提示符
– Felix Edelmann
2015年9月2日在15:23
@DannyLo非常感谢您提供到Eclipse插件的链接!
–诺亚·布鲁克斯(Noah Broyles)
2月5日14:17
#2 楼
这是带有public static
字段的Java类中的颜色列表。用法
System.out.println(ConsoleColors.RED + "RED COLORED" +
ConsoleColors.RESET + " NORMAL");
注意
不要忘记使用如果未清除,打印后的
RESET
会保留效果。public class ConsoleColors {
// Reset
public static final String RESET = "3[0m"; // Text Reset
// Regular Colors
public static final String BLACK = "3[0;30m"; // BLACK
public static final String RED = "3[0;31m"; // RED
public static final String GREEN = "3[0;32m"; // GREEN
public static final String YELLOW = "3[0;33m"; // YELLOW
public static final String BLUE = "3[0;34m"; // BLUE
public static final String PURPLE = "3[0;35m"; // PURPLE
public static final String CYAN = "3[0;36m"; // CYAN
public static final String WHITE = "3[0;37m"; // WHITE
// Bold
public static final String BLACK_BOLD = "3[1;30m"; // BLACK
public static final String RED_BOLD = "3[1;31m"; // RED
public static final String GREEN_BOLD = "3[1;32m"; // GREEN
public static final String YELLOW_BOLD = "3[1;33m"; // YELLOW
public static final String BLUE_BOLD = "3[1;34m"; // BLUE
public static final String PURPLE_BOLD = "3[1;35m"; // PURPLE
public static final String CYAN_BOLD = "3[1;36m"; // CYAN
public static final String WHITE_BOLD = "3[1;37m"; // WHITE
// Underline
public static final String BLACK_UNDERLINED = "3[4;30m"; // BLACK
public static final String RED_UNDERLINED = "3[4;31m"; // RED
public static final String GREEN_UNDERLINED = "3[4;32m"; // GREEN
public static final String YELLOW_UNDERLINED = "3[4;33m"; // YELLOW
public static final String BLUE_UNDERLINED = "3[4;34m"; // BLUE
public static final String PURPLE_UNDERLINED = "3[4;35m"; // PURPLE
public static final String CYAN_UNDERLINED = "3[4;36m"; // CYAN
public static final String WHITE_UNDERLINED = "3[4;37m"; // WHITE
// Background
public static final String BLACK_BACKGROUND = "3[40m"; // BLACK
public static final String RED_BACKGROUND = "3[41m"; // RED
public static final String GREEN_BACKGROUND = "3[42m"; // GREEN
public static final String YELLOW_BACKGROUND = "3[43m"; // YELLOW
public static final String BLUE_BACKGROUND = "3[44m"; // BLUE
public static final String PURPLE_BACKGROUND = "3[45m"; // PURPLE
public static final String CYAN_BACKGROUND = "3[46m"; // CYAN
public static final String WHITE_BACKGROUND = "3[47m"; // WHITE
// High Intensity
public static final String BLACK_BRIGHT = "3[0;90m"; // BLACK
public static final String RED_BRIGHT = "3[0;91m"; // RED
public static final String GREEN_BRIGHT = "3[0;92m"; // GREEN
public static final String YELLOW_BRIGHT = "3[0;93m"; // YELLOW
public static final String BLUE_BRIGHT = "3[0;94m"; // BLUE
public static final String PURPLE_BRIGHT = "3[0;95m"; // PURPLE
public static final String CYAN_BRIGHT = "3[0;96m"; // CYAN
public static final String WHITE_BRIGHT = "3[0;97m"; // WHITE
// Bold High Intensity
public static final String BLACK_BOLD_BRIGHT = "3[1;90m"; // BLACK
public static final String RED_BOLD_BRIGHT = "3[1;91m"; // RED
public static final String GREEN_BOLD_BRIGHT = "3[1;92m"; // GREEN
public static final String YELLOW_BOLD_BRIGHT = "3[1;93m";// YELLOW
public static final String BLUE_BOLD_BRIGHT = "3[1;94m"; // BLUE
public static final String PURPLE_BOLD_BRIGHT = "3[1;95m";// PURPLE
public static final String CYAN_BOLD_BRIGHT = "3[1;96m"; // CYAN
public static final String WHITE_BOLD_BRIGHT = "3[1;97m"; // WHITE
// High Intensity backgrounds
public static final String BLACK_BACKGROUND_BRIGHT = "3[0;100m";// BLACK
public static final String RED_BACKGROUND_BRIGHT = "3[0;101m";// RED
public static final String GREEN_BACKGROUND_BRIGHT = "3[0;102m";// GREEN
public static final String YELLOW_BACKGROUND_BRIGHT = "3[0;103m";// YELLOW
public static final String BLUE_BACKGROUND_BRIGHT = "3[0;104m";// BLUE
public static final String PURPLE_BACKGROUND_BRIGHT = "3[0;105m"; // PURPLE
public static final String CYAN_BACKGROUND_BRIGHT = "3[0;106m"; // CYAN
public static final String WHITE_BACKGROUND_BRIGHT = "3[0;107m"; // WHITE
}
#3 楼
我创建了一个名为JColor的库,该库可在Linux,macOS和Windows 10上运行。它使用WhiteFang提到的ANSI代码,但是使用单词而不是更抽象的代码来抽象它们。最近,我添加了对8位和24位颜色的支持🌈
选择格式
colorize
并打印: System.out.println(colorize("Green text on blue", GREEN_TEXT(), BLUE_BACK()));
您还可以定义一次格式,然后重复使用几次:
AnsiFormat fWarning = new AnsiFormat(RED_TEXT(), YELLOW_BACK(), BOLD());
System.out.println(colorize("Something bad happened!", fWarning));
转到JColor github存储库以获取一些格式例子。
#4 楼
尝试以下枚举:enum Color {
//Color end string, color reset
RESET("3[0m"),
// Regular Colors. Normal color, no bold, background color etc.
BLACK("3[0;30m"), // BLACK
RED("3[0;31m"), // RED
GREEN("3[0;32m"), // GREEN
YELLOW("3[0;33m"), // YELLOW
BLUE("3[0;34m"), // BLUE
MAGENTA("3[0;35m"), // MAGENTA
CYAN("3[0;36m"), // CYAN
WHITE("3[0;37m"), // WHITE
// Bold
BLACK_BOLD("3[1;30m"), // BLACK
RED_BOLD("3[1;31m"), // RED
GREEN_BOLD("3[1;32m"), // GREEN
YELLOW_BOLD("3[1;33m"), // YELLOW
BLUE_BOLD("3[1;34m"), // BLUE
MAGENTA_BOLD("3[1;35m"), // MAGENTA
CYAN_BOLD("3[1;36m"), // CYAN
WHITE_BOLD("3[1;37m"), // WHITE
// Underline
BLACK_UNDERLINED("3[4;30m"), // BLACK
RED_UNDERLINED("3[4;31m"), // RED
GREEN_UNDERLINED("3[4;32m"), // GREEN
YELLOW_UNDERLINED("3[4;33m"), // YELLOW
BLUE_UNDERLINED("3[4;34m"), // BLUE
MAGENTA_UNDERLINED("3[4;35m"), // MAGENTA
CYAN_UNDERLINED("3[4;36m"), // CYAN
WHITE_UNDERLINED("3[4;37m"), // WHITE
// Background
BLACK_BACKGROUND("3[40m"), // BLACK
RED_BACKGROUND("3[41m"), // RED
GREEN_BACKGROUND("3[42m"), // GREEN
YELLOW_BACKGROUND("3[43m"), // YELLOW
BLUE_BACKGROUND("3[44m"), // BLUE
MAGENTA_BACKGROUND("3[45m"), // MAGENTA
CYAN_BACKGROUND("3[46m"), // CYAN
WHITE_BACKGROUND("3[47m"), // WHITE
// High Intensity
BLACK_BRIGHT("3[0;90m"), // BLACK
RED_BRIGHT("3[0;91m"), // RED
GREEN_BRIGHT("3[0;92m"), // GREEN
YELLOW_BRIGHT("3[0;93m"), // YELLOW
BLUE_BRIGHT("3[0;94m"), // BLUE
MAGENTA_BRIGHT("3[0;95m"), // MAGENTA
CYAN_BRIGHT("3[0;96m"), // CYAN
WHITE_BRIGHT("3[0;97m"), // WHITE
// Bold High Intensity
BLACK_BOLD_BRIGHT("3[1;90m"), // BLACK
RED_BOLD_BRIGHT("3[1;91m"), // RED
GREEN_BOLD_BRIGHT("3[1;92m"), // GREEN
YELLOW_BOLD_BRIGHT("3[1;93m"), // YELLOW
BLUE_BOLD_BRIGHT("3[1;94m"), // BLUE
MAGENTA_BOLD_BRIGHT("3[1;95m"), // MAGENTA
CYAN_BOLD_BRIGHT("3[1;96m"), // CYAN
WHITE_BOLD_BRIGHT("3[1;97m"), // WHITE
// High Intensity backgrounds
BLACK_BACKGROUND_BRIGHT("3[0;100m"), // BLACK
RED_BACKGROUND_BRIGHT("3[0;101m"), // RED
GREEN_BACKGROUND_BRIGHT("3[0;102m"), // GREEN
YELLOW_BACKGROUND_BRIGHT("3[0;103m"), // YELLOW
BLUE_BACKGROUND_BRIGHT("3[0;104m"), // BLUE
MAGENTA_BACKGROUND_BRIGHT("3[0;105m"), // MAGENTA
CYAN_BACKGROUND_BRIGHT("3[0;106m"), // CYAN
WHITE_BACKGROUND_BRIGHT("3[0;107m"); // WHITE
private final String code;
Color(String code) {
this.code = code;
}
@Override
public String toString() {
return code;
}
}
现在我们将举一个小例子:
class RunApp {
public static void main(String[] args) {
System.out.print(Color.BLACK_BOLD);
System.out.println("Black_Bold");
System.out.print(Color.RESET);
System.out.print(Color.YELLOW);
System.out.print(Color.BLUE_BACKGROUND);
System.out.println("YELLOW & BLUE");
System.out.print(Color.RESET);
System.out.print(Color.YELLOW);
System.out.println("YELLOW");
System.out.print(Color.RESET);
}
}
评论
这是答案的副本stackoverflow.com/a/45444716/675577
– Dialex
19/12/21在18:58
#5 楼
原始转义序列是一种相当可移植的方法。请参阅http://en.wikipedia.org/wiki/ANSI_escape_code[在2017-02-20上为user9999999编辑]]
Java不会“处理代码” ,的确如此,但是Java输出了您告诉它的输出。 Windows控制台将ESC(chr(27))视为另一个标志符号(←),这并不是Java的错。
评论
这是行不通的,因为Java IO层不会将其转换为颜色。从Windows cmd.com作为可执行文件.jar运行时,System.out.println((char)27 +“ [31; 1mERROR” +(char)27 +“ [0m”)仅产生“ [31; 1mERROR [0m”“
–简单用户
17年2月12日在6:03
这个问题不是Windows标签。我记得Windows控制台从不兼容ANSI。
– jcomeau_ictx
17年2月12日在14:52
但是问题是,无论cmd.com的支持如何,java都不会处理代码
–简单用户
17年2月20日在17:31
查看修改后的答案。 Java完全按照所告诉的那样做。问题是不符合ANSI的控制台。
– jcomeau_ictx
17年2月21日在6:32
我有同样的问题
–StéphaneGRILLON
18 Mar 15 '18 at 14:58
#6 楼
您可以使用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(".")
);
#7 楼
如果有人正在寻找快速解决方案,请随时使用以下帮助程序类:)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代码。
#8 楼
为控制台文本着色的最佳方法是使用ANSI转义码。除文本颜色外,ANSI转义码还允许使用背景颜色,装饰等。Unix
如果使用springboot,则有一个特定的枚举用于文本着色:org。 springframework.boot.ansi.AnsiColor
Jansi库要先进一些(可以使用所有ANSI转义码功能),提供API并支持使用JNA的Windows。
否则,您可以手动定义自己的颜色,如其他响应所示。
Windows 10
Windows 10(自版本10.0.10586-2015年11月开始)支持ANSI转义码(MSDN文档),但默认情况下未启用。要启用它:
通过SetConsoleMode API,使用
ENABLE_VIRTUAL_TERMINAL_PROCESSING (0x0400)
标志。 Jansi使用此选项。如果未使用SetConsoleMode API,则可以通过创建dword并将其设置为0或1进行ANSI处理来更改全局注册表项
HKEY_CURRENT_USER\Console\VirtualTerminalLevel
:"VirtualTerminalLevel"=dword:00000001
Windows 10之前的版本
Windows控制台不支持ANSI颜色。但是可以使用这样做的控制台。
#9 楼
表情符号您可以使用颜色作为文字,就像其他人在答案中提到的那样。
但是您可以改用表情符号!例如,您可以使用可以将
⚠️
用于警告消息,将🛑
用于错误消息。或简单地将这些笔记本用作颜色:
📕: error message
📙: warning message
📗: ok status message
📘: action message
📓: canceled status message
📔: Or anything you like and want to recognize immediately by color
🎁奖励:
此方法还可以帮助您直接直接在源代码中快速扫描和查找日志。
但是linux和Windows CMD默认的emoji字体默认情况下不是彩色的,您可能首先要使其彩色。
#10 楼
使用颜色功能打印带有颜色的文本代码:
enum Color {
RED("3[0;31m"), // RED
GREEN("3[0;32m"), // GREEN
YELLOW("3[0;33m"), // YELLOW
BLUE("3[0;34m"), // BLUE
MAGENTA("3[0;35m"), // MAGENTA
CYAN("3[0;36m"), // CYAN
private final String code
Color(String code) {
this.code = code;
}
@Override
String toString() {
return code
}
}
def color = { color, txt ->
def RESET_COLOR = "3[0m"
return "${color}${txt}${RESET_COLOR}"
}
用法:
test {
println color(Color.CYAN, 'testing')
}
#11 楼
删除:public static final String ANSI_STRIKEOUT_BLACK = "\u001B[30;9m";
public static final String ANSI_STRIKEOUT_RED = "\u001B[31;9m";
public static final String ANSI_STRIKEOUT_GREEN = "\u001B[32;9m";
public static final String ANSI_STRIKEOUT_YELLOW = "\u001B[33;9m";
public static final String ANSI_STRIKEOUT_BLUE = "\u001B[34;9m";
public static final String ANSI_STRIKEOUT_PURPLE = "\u001B[35;9m";
public static final String ANSI_STRIKEOUT_CYAN = "\u001B[36;9m";
public static final String ANSI_STRIKEOUT_WHITE = "\u001B[37;9m";
#12 楼
如果您使用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
检查可以通过将代码替换为空字符串来避免问题。#13 楼
在Java中以红色打印任何文本的最佳解决方案是: System.err.print("Hello World");
评论
“ downvote”不是我的-但是,还有其他答案提供了OP的问题,它们在一段时间前发布。发布答案时,请参阅:我如何写一个好的答案?,请确保添加新的解决方案或实质上更好的解释,尤其是在回答较旧的问题时。
–help-info.de
19年11月7日在13:35
@iSahil这可能被否决了,因为简单地写标准错误不会显式地着色任何东西。许多IDE和控制台都会解释错误消息,并以红色或类似的颜色打印错误消息,但这并不是您可以依靠的。
–大卫
19年11月7日在13:38
虽然这不是上面提出的问题的直接答案,但这是我在搜索“红色控制台中的Java打印”时寻找的答案。因此,我确实觉得它已经在此页面上了。
–莫德
1月7日在16:07
评论
如果控制台支持(例如Eclipse Java控制台)自定义stdout / stderr的颜色,则可以将System.out.println用作一种颜色,将System.err.println用作另一种颜色。