web-dev-qa-db-ja.com

System.out.printlnを使ってコンソールに色を印刷するにはどうすればいいですか?

コンソールでカラーを印刷する方法プロセッサがデータを送信するときは色付きで表示し、データを受信するときは色付きで表示します。

260
Taranath Datta

あなたの端末がそれをサポートしているなら、あなたの出力に色を使うために ANSIエスケープコード を使うことができます。通常、Unixシェルのプロンプトに対して機能します。ただし、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);
493
WhiteFang34

JCDPJavaカラーデバッグプリンタ)というライブラリを作成しました。

Linuxでは、WhiteFangが言及したANSIエスケープコードを使用しますが、コードの代わりに 単語を使用してそれらを抽象化します これははるかに直感的です。次のように簡単になります。

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

Windowsの場合は JAnsi に依存しますが、その上に抽象化層を作成し、上記の直感的で単純なAPIを維持します。

いくつかの例が JCDPのgithubリポジトリ にあります。

45
dialex

これは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
}
43
shakram02
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);
20
马哥私房菜

それを行うためのかなり移植性の高い方法は、生のエスケープシーケンスを使うことです。 http://en.wikipedia.org/wiki/ANSI_escape_code を参照してください。

[2017-02-20にuser9999999用に編集]

Javaは「コードを処理する」のではありません、そうです、しかし、Javaはあなたがそれを出力するようにあなたが言ったものを出力します。 WindowsコンソールがESC(chr(27))を別のグリフ(←)として扱うのはJavaのせいではありません。

you made me boot into Windows. you owe me, bro

14
jcomeau_ictx

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
Nathan F.

誰かが手っ取り早い解決策を探しているなら、以下のヘルパークラスを使ってください。

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。

5
Ajmal Salim

コンソールテキストに色を付ける最善の方法は、 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を作成してグローバルレジストリキーHKEY_CURRENT_USER\Console\VirtualTerminalLevelを変更し、ANSI処理用に0または1に設定することができます。"VirtualTerminalLevel"=dword:00000001

Windows 10より前

WindowsコンソールはANSIカラーをサポートしません。しかし、コンソールを使用することは可能です。

2
NayoR

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チェックはコードを空の文字列に置き換えることで問題を回避します。

0
Louis CAD