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

Tar*_*tta 293 java text colors

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

Whi*_*g34 540

如果您的终端支持它,您可以使用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";
Run Code Online (Sandbox Code Playgroud)

然后,您可以根据需要引用它们.

例如,使用上面的常量,您可以在支持的终端上输出以下红色文本:

System.out.println(ANSI_RED + "This text is red!" + ANSI_RESET);
Run Code Online (Sandbox Code Playgroud)

更新:您可能想查看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";
Run Code Online (Sandbox Code Playgroud)

例如:

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);
Run Code Online (Sandbox Code Playgroud)

  • @Boro:重置代码关闭到目前为止设置的所有ANSI属性,这应该将控制台返回到其默认值.如果您不知道默认颜色或者还使用其他一些属性(如背景颜色,字体样式等),这将非常有用. (3认同)
  • 詹西真的很棒!对于那些在 eclipse 中开发的人,我可以推荐这个插件:http://mihai-nita.net/2013/06/03/eclipse-plugin-ansi-in-console/ 和一段不错的代码来启用颜色,如果代码没有在控制台中执行:`if (System.console() == null) System.setProperty("jansi.passthrough", "true");` (2认同)
  • @PankajNimgade,再次阅读答案,您可能会注意到这一点:“但是它不适用于 Windows 命令提示符” (2认同)

sha*_*m02 53

以下是带有public static字段的Java类中的颜色列表

用法

System.out.println(ConsoleColors.RED + "RED COLORED" +
ConsoleColors.RESET + " NORMAL");
Run Code Online (Sandbox Code Playgroud)


注意 不要忘记使用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
}
Run Code Online (Sandbox Code Playgroud)

  • 在 IntelliJ 控制台中运行得很好,谢谢! (10认同)

dia*_*lex 50

我创建了一个名为JCDP(Java彩色调试打印机)的库.

对于Linux,它使用WhiteFang提到的ANSI转义码,但是使用单词而不是代码对它们进行抽象,这更加直观.它变得如此简单:

print("Hello World!", Attribute.BOLD, FColor.YELLOW, BColor.GREEN);
Run Code Online (Sandbox Code Playgroud)

对于Windows,它实际上包含JAnsi库,但在其上创建了一个抽象层,维护了为Linux创建的直观和简单的界面.

该库根据MIT许可证授权,因此可以随意使用它.

看看JCDP的github存储库.

  • 好的。按预期工作。 (2认同)
  • 如此精彩!我爱它!谢谢你!:) (2认同)

小智 24

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);
Run Code Online (Sandbox Code Playgroud)

  • 这是答案的副本/sf/answers/3181130151/ (6认同)
  • @dialex 这个答案似乎最初来自 [w3schools](https://www.w3schools.blog/ansi-colors-java),这个答案提供了枚举形式的常量,在我看来,这是更干净、更现代的代码,保持这些常量的更好做法。 (2认同)

jco*_*ctx 14

一种相当便携的方法是使用原始转义序列.请参见http://en.wikipedia.org/wiki/ANSI_escape_code

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

Java没有"处理代码",这是真的,但Java输出你告诉它输出的内容.Windows控制台将ESC(chr(27))视为另一个字形(←)并不是Java的错.

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

  • 见编辑的答案.Java正如它所说的那样完成.问题是不符合ANSI标准的控制台. (2认同)

Nat*_* F. 7

您可以使用ANSI转义序列执行此操作.我实际上已经把这个类放在Java中,适合那些想要一个简单的解决方法的人.它允许在文本中使用自定义颜色代码.

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

示例使用:

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

颜色代码格式没有背景颜色 - >:foreground,N:

重置颜色格式 - > [RC]

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(".")
);
Run Code Online (Sandbox Code Playgroud)

要么

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(".")
);
Run Code Online (Sandbox Code Playgroud)


Nay*_*yoR 7

为控制台文本着色的最佳方法是使用ANSI 转义码。除了文本颜色之外,ANSI 转义码还允许使用背景颜色、装饰等。

Unix

如果您使用 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 并将其设置为 0 或 1来更改全局注册表项以进行 ANSI 处理: "VirtualTerminalLevel"=dword:00000001

在 Windows 10 之前

Windows 控制台不支持 ANSI 颜色。但是可以使用控制台。


Ajm*_*lim 5

如果有人正在寻找快速解决方案,请随意使用以下帮助程序类:)

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

}
Run Code Online (Sandbox Code Playgroud)

用法:

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");
Run Code Online (Sandbox Code Playgroud)

感谢@ whiteFang34获取ANSI代码.


Moj*_*ini 5

表情符号

您可以使用其他人在答案中提到的文本颜色。

但是您可以使用表情符号代替!例如,您可以使用 You can use ??for warning message and for error message。

或者简单地使用这些笔记本作为颜色:

: error message
: warning message
: ok status message
: action message
: canceled status message
: Or anything you like and want to recognize immediately by color
Run Code Online (Sandbox Code Playgroud)

奖金:

这种方法还可以帮助您直接在源代码中快速扫描和查找日志。

但是 linux 和 Windows CMD 默认表情符号字体默认情况下不是彩色的,您可能首先想让它们变得彩色。

  • 这可能需要 UTF 或类似的支持。您只提供最终结果,而不是编码员为此需要做的事情。答案可能会打破问题所涵盖的范围。 (2认同)