วิธีการพิมพ์สีในคอนโซลโดยใช้ System.out.println


325

ฉันจะพิมพ์สีในคอนโซลได้อย่างไร ฉันต้องการแสดงข้อมูลเป็นสีเมื่อหน่วยประมวลผลส่งข้อมูลและมีสีต่างกันเมื่อรับข้อมูล


2
หากการสนับสนุนคอนโซล (เช่นคอนโซล Eclipse Java) การปรับแต่งสีของ stdout / stderr คุณสามารถใช้ System.out.println สำหรับสีหนึ่งและ System.err.println สำหรับสีอื่น
jw_

คำตอบ:


585

หากเทอร์มินัลของคุณรองรับคุณสามารถใช้รหัสหลบหนี ANSIเพื่อใช้สีในเอาต์พุตของคุณ มันใช้งานได้กับ Unix shell prompt; อย่างไรก็ตามมันไม่สามารถใช้งานได้สำหรับ Windows Command Prompt (แม้ว่าจะใช้งานได้กับ 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 และมีการรองรับ Windows โดยใช้ JNI ฉันยังไม่ได้ลองเลย อย่างไรก็ตามมันดูมีแนวโน้ม

อัปเดต 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);

1
@ WhiteFang34 คุณช่วยอธิบายการใช้ RESET ได้อย่างไรถ้าสีมันเป็นสีดำอย่างน้อยในคอนโซลของฉัน? มันเหมือนค่าเริ่มต้นหรือ sth.?
Boro

8
@Boro: รหัสรีเซ็ตจะปิดคุณลักษณะ ANSI ทั้งหมดที่ตั้งไว้ซึ่งควรกลับไปที่คอนโซลเป็นค่าเริ่มต้น มันจะมีประโยชน์ถ้าคุณไม่รู้จักสีเริ่มต้นหรือใช้คุณลักษณะอื่น ๆ เช่นสีพื้นหลังลักษณะแบบอักษรเป็นต้น
WhiteFang34

2
jansi ยอดเยี่ยมจริงๆ! สำหรับผู้ที่พัฒนาใน eclipse ฉันสามารถแนะนำปลั๊กอินนี้ได้อีกครั้ง: mihai-nita.net/2013/06/03/eclipse-plugin-ansi-ini-consoleและโค้ดที่ดีเพื่อให้ได้สีถ้ารหัสไม่ถูกเรียกใช้งาน ในคอนโซล:if (System.console() == null) System.setProperty("jansi.passthrough", "true");
Danny Lo

1
@PankajNimgade อ่านคำตอบอีกครั้งและคุณอาจสังเกตเห็นสิ่งนี้:however it doesn't work for Windows command prompt
Felix Edelmann

1
@DannyLo ขอบคุณมากสำหรับลิงก์ไปยังปลั๊กอิน Eclipse!
Noah Broyles

71

นี่คือรายการสีในคลาส 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
}

55

ฉันสร้างห้องสมุดที่ชื่อว่าJCDP ( Java Colored Debug Printer )

สำหรับ Linux, macOS และ Windows 10 มันใช้รหัสหลบหนี ANSI ที่ WhiteFang พูดถึง แต่ย่อท้อให้ใช้คำแทนรหัสซึ่งใช้งานง่ายกว่ามาก มันง่ายเหมือน:

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

คุณมีตัวอย่างบางส่วนที่เก็บข้อมูล GitHub JCDP ของ


33

ลอง enum ต่อไปนี้:

enum Color {
    //Color end string, color reset
    RESET("\033[0m"),

    // Regular Colors. Normal color, no bold, background color etc.
    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;
    }
}

และตอนนี้เราจะทำตัวอย่างเล็ก ๆ :

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

2
นี่เป็นสำเนาของคำตอบstackoverflow.com/a/45444716/675577
dialex

14

วิธีการพกพาที่ทำได้ค่อนข้างดีคือการใช้ลำดับการหลบหลีกแบบดิบ ดูhttp://en.wikipedia.org/wiki/ANSI_escape_code

[แก้ไขสำหรับผู้ใช้ 9999999 วันที่ 2017-02-20]

Java ไม่ "จัดการกับรหัส" นั่นเป็นความจริง แต่ Java แสดงสิ่งที่คุณบอกให้ส่งออก ไม่ใช่ความผิดของ Java ที่คอนโซล Windows ใช้กับ ESC (chr (27)) เหมือนกับ glyph (←) อื่น

คุณทำให้ฉันบูตเข้าสู่ Windows  คุณเป็นหนี้ฉัน


ซึ่งไม่ทำงานเนื่องจากเลเยอร์ Java IO ไม่แปลงสีเป็นสี System.out.println ((ถ่าน) 27 + "[31; 1mERROR" + (ถ่าน) 27 + "[0m" ให้ผลตอบแทนเท่านั้น "[31; 1mERROR [0m" เมื่อเรียกใช้จาก windows cmd.com เป็นไฟล์ปฏิบัติการ)
simpleuser

windowsคำถามที่ยังไม่ได้รับการติดแท็ก คอนโซล Windows ไม่เคยเป็นไปตามมาตรฐาน ANSI ที่ฉันจำได้
jcomeau_ictx

แต่ปัญหาคือ java ไม่ได้จัดการกับรหัสโดยไม่คำนึงถึงการสนับสนุนของ
cmd.com

3
ดูคำตอบที่แก้ไข Java ทำตามที่บอก ปัญหาคือคอนโซลที่ไม่สอดคล้องกับ ANSI
jcomeau_ictx

1
ฉันมีปัญหาเดียวกัน
sgrillon

7

คุณสามารถทำได้โดยใช้ ANSI escape sequences ฉันได้รวบรวมคลาสนี้ไว้ใน 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(".")
);

6

หากใครกำลังมองหาวิธีแก้ปัญหาอย่างรวดเร็วอย่าลังเลที่จะใช้คลาสผู้ช่วยเหลือดังต่อไปนี้ :)

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


4

วิธีที่ดีที่สุดให้กับข้อความคอนโซลสีคือการใช้รหัสหนี ANSI นอกจากสีข้อความแล้วโค้ดหลบหนีของ ANSI ยังอนุญาตให้ใช้สีพื้นหลังการตกแต่งและอื่น ๆ อีกมากมาย

ยูนิกซ์

หากคุณใช้ springboot จะมี enum เฉพาะสำหรับการระบายสีข้อความ: org.springframework.boot.ansi.AnsiColor

ห้องสมุดJansiเป็นขั้นสูงขึ้นอีกเล็กน้อย (สามารถใช้ ANSI ทั้งหมดรหัสหลบหนี fonctions), ให้ API และมีการสนับสนุนสำหรับ Windowsโดยใช้ JNA

มิฉะนั้นคุณสามารถกำหนดสีของคุณเองได้ดังแสดงเป็นคำตอบอื่น ๆ

Windows 10

Windows 10 (ตั้งแต่บิวด์ 10.0.10586 - พ.ย. 2558) รองรับรหัสหลบหนี 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 แต่เป็นไปได้ที่จะใช้คอนโซลที่ทำ


1

การใช้ฟังก์ชั่นสีเพื่อพิมพ์ข้อความด้วยสี

รหัส:

enum Color {

    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

    private final String code

    Color(String code) {
        this.code = code;
    }

    @Override
    String toString() {
        return code
    }
}

def color = { color, txt ->
    def RESET_COLOR = "\033[0m"
    return "${color}${txt}${RESET_COLOR}"
}

การใช้งาน:


test {
    println color(Color.CYAN, 'testing')
}

0

เพื่อขีดฆ่า:

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

-1

ทางออกที่ดีที่สุดในการพิมพ์ข้อความใด ๆ ในสีแดงใน Java คือ:

System.err.print("Hello World");

"downvote" ไม่ใช่ของฉัน - แต่มีคำตอบอื่น ๆ ที่ให้คำถามของ OP และพวกเขาโพสต์เมื่อไม่นานมานี้ เมื่อโพสต์คำตอบดู: ฉันจะเขียนคำตอบที่ดีได้อย่างไร โปรดตรวจสอบให้แน่ใจว่าคุณได้เพิ่มโซลูชันใหม่หรือคำอธิบายที่ดีขึ้นอย่างมากโดยเฉพาะเมื่อตอบคำถามรุ่นเก่า
help-info.de

7
@iSahil อาจมีการลดระดับลงเนื่องจากการเขียนไปยังข้อผิดพลาดมาตรฐานไม่ได้ทำให้สีชัดเจน IDE และคอนโซลจำนวนมากจะตีความข้อความแสดงข้อผิดพลาดและพิมพ์เป็นสีแดงหรือคล้ายกัน แต่นั่นไม่ใช่สิ่งที่คุณสามารถวางใจได้
David

1
ในขณะที่นี่ไม่ใช่คำตอบที่ตรงกับคำถามที่ถามข้างต้นนี่คือคำตอบที่ฉันกำลังมองหาเมื่อค้นหา "java print in red console" ดังนั้นฉันรู้สึกว่ามันมีอยู่ในหน้านี้
ม้อด

-2

หากคุณใช้ Kotlin (ซึ่งทำงานร่วมกับ Java ได้อย่างราบรื่น) คุณสามารถสร้าง Enum เช่น:

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

หากใช้งานบน Windows ที่ไม่รองรับรหัส ANSI เหล่านี้การisCompatibleตรวจสอบจะหลีกเลี่ยงปัญหาโดยการแทนที่รหัสด้วยสตริงว่าง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.