控制台打印带颜色的字符「终于解决」

控制台打印带颜色的字符「终于解决」写Java程序的时候,为了看到程序的状态,省事时会写很多的System.out。这本来是为了看程序运行状态,结果满屏幕的输出,看起来很费劲。同样的情况出现在tomcat的日志上,System.out和log会同时写在catalina.out中,tail起来也费劲。如果一些打印是带颜色的,那醒目多了。于是写了一个简答的实现,让打印的字符带颜色。效果如下(我设置控制台背景是黑色):使用…

大家好,欢迎来到IT知识分享网。

Java程序的时候,为了看到程序的状态,省事时会写很多的System.out。这本来是为了看程序运行状态,结果满屏幕的输出,看起来很费劲。同样的情况出现在tomcat的日志上,System.out和log会同时写在catalina.out中,tail起来也费劲。

如果一些打印是带颜色的,那醒目多了。于是写了一个简答的实现,让打印的字符带颜色。

效果如下(我设置控制台背景是黑色):

打印效果图

使用起来也很简单:

PRINT.PN("黑色", PRINT.BLACK);
PRINT.PN("白色", PRINT.WHITE);
PRINT.PN("红色", PRINT.RED);
PRINT.PN("绿色", PRINT.GREEN);
PRINT.PN("黄色", PRINT.YELLOW);
PRINT.PN("蓝色", PRINT.BLUE);
PRINT.PN("品红", PRINT.MAGENTA);
PRINT.PN("蓝绿", PRINT.CYAN);
PRINT.PN("黑底白字", PRINT.WHITE, PRINT.BLACK_BACKGROUND);
PRINT.PN("白底黑字", PRINT.BLACK, PRINT.WHITE_BACKGROUND);
PRINT.PN("蓝底红字", PRINT.RED, PRINT.BLUE_BACKGROUND);
PRINT.PN("加粗倾斜", PRINT.BOLD, PRINT.ITATIC);
PRINT.PN("黄底白字下划线", PRINT.WHITE, PRINT.YELLOW_BACKGROUND, PRINT.UNDERLINE);
PRINT.PN("红字颜色反转", PRINT.RED, PRINT.REVERSE);

这个的原理见维基百科:ANSI转义字符

代码很短,可以去我的码云下载:控制台打印带颜色的字符,也可以直接复制下面源码:

public class PRINT {

    public static void main(String[] args) {
        PRINT.PN("黑色", PRINT.BLACK);
        PRINT.PN("白色", PRINT.WHITE);
        PRINT.PN("红色", PRINT.RED);
        PRINT.PN("绿色", PRINT.GREEN);
        PRINT.PN("黄色", PRINT.YELLOW);
        PRINT.PN("蓝色", PRINT.BLUE);
        PRINT.PN("品红", PRINT.MAGENTA);
        PRINT.PN("蓝绿", PRINT.CYAN);
        PRINT.PN("黑底白字", PRINT.WHITE, PRINT.BLACK_BACKGROUND);
        PRINT.PN("白底黑字", PRINT.BLACK, PRINT.WHITE_BACKGROUND);
        PRINT.PN("蓝底红字", PRINT.RED, PRINT.BLUE_BACKGROUND);
        PRINT.PN("加粗倾斜", PRINT.BOLD, PRINT.ITATIC);
        PRINT.PN("黄底白字下划线", PRINT.WHITE, PRINT.YELLOW_BACKGROUND, PRINT.UNDERLINE);
        PRINT.PN("红字颜色反转", PRINT.RED, PRINT.REVERSE);
    }

    public static final int WHITE = 30;             // 白色
    public static final int WHITE_BACKGROUND = 40;  // 白色背景
    public static final int RED = 31;               // 红色
    public static final int RED_BACKGROUND = 41;    // 红色背景
    public static final int GREEN = 32;             // 绿色
    public static final int GREEN_BACKGROUND = 42;  // 绿色背景
    public static final int YELLOW = 33;            // 黄色
    public static final int YELLOW_BACKGROUND = 43; // 黄色背景
    public static final int BLUE = 34;              // 蓝色
    public static final int BLUE_BACKGROUND = 44;   // 蓝色背景
    public static final int MAGENTA = 35;           // 品红(洋红)
    public static final int MAGENTA_BACKGROUND = 45;// 品红背景
    public static final int CYAN = 36;              // 蓝绿
    public static final int CYAN_BACKGROUND = 46;   // 蓝绿背景
    public static final int BLACK = 37;             // 黑色
    public static final int BLACK_BACKGROUND = 47;  // 黑色背景

    public static final int BOLD = 1;       // 粗体
    public static final int ITATIC = 3;     // 斜体
    public static final int UNDERLINE = 4;  // 下划线
    public static final int REVERSE = 7;    // 反转

    private static String FMT(String txt, int... codes) {
        StringBuffer sb = new StringBuffer();
        for (int code : codes) {
            sb.append(code + ";");
        }
        String _code = sb.toString();
        if (_code.endsWith(";")) {
            _code = _code.substring(0, _code.length() - 1);
        }
        return (char) 27 + "[" + _code + "m" + txt + (char) 27 + "[0m";
    }

    /**
     * 打印不换行
     */
    public static void P(String txt, int... codes) {
        System.out.print(FMT(txt, codes));
    }

    /**
     * 打印并换行
     */
    public static void PN(String txt, int... codes) {
        System.out.println(FMT(txt, codes));
    }

    /**
     * 默认打印红色文字
     */
    public static void PN(String txt) {
        System.out.println(FMT(txt, new int[]{RED}));
    }
}

 

 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/25840.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信