控制台打印带颜色的字符

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

 

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值