当前位置: 首页 > news >正文

java-推荐一个控制台输出颜色ANSI字符的类

java-推荐一个控制台输出颜色ANSI字符的类

    • 背景
    • 代码
    • 调用
    • 输出

背景

这个类是来自hive的一段代码,大家可以参考一下,这个类名是ColorBuffer

代码

/** Licensed to the Apache Software Foundation (ASF) under one* or more contributor license agreements.  See the NOTICE file* distributed with this work for additional information* regarding copyright ownership.  The ASF licenses this file* to you under the Apache License, Version 2.0 (the* "License"); you may not use this file except in compliance* with the License.  You may obtain a copy of the License at**     http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*//** This source file is based on code taken from SQLLine 1.0.2* See SQLLine notice in LICENSE*/
package MyCollections;import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;/*** A buffer that can output segments using ANSI color.**/
final class ColorBuffer implements Comparable<Object> {private static final ColorAttr BOLD = new ColorAttr("\033[1m");private static final ColorAttr NORMAL = new ColorAttr("\033[m");private static final ColorAttr REVERS = new ColorAttr("\033[7m");private static final ColorAttr LINED = new ColorAttr("\033[4m");private static final ColorAttr GREY = new ColorAttr("\033[1;30m");private static final ColorAttr RED = new ColorAttr("\033[1;31m");private static final ColorAttr GREEN = new ColorAttr("\033[1;32m");private static final ColorAttr BLUE = new ColorAttr("\033[1;34m");private static final ColorAttr CYAN = new ColorAttr("\033[1;36m");private static final ColorAttr YELLOW = new ColorAttr("\033[1;33m");private static final ColorAttr MAGENTA = new ColorAttr("\033[1;35m");private static final ColorAttr INVISIBLE = new ColorAttr("\033[8m");private final List<Object> parts = new LinkedList<Object>();private int visibleLength = 0;private final boolean useColor;public ColorBuffer(boolean useColor) {this.useColor = useColor;append("");}public ColorBuffer(String str, boolean useColor) {this.useColor = useColor;append(str);}/*** Pad the specified String with spaces to the indicated length** @param str*          the String to pad* @param len*          the length we want the return String to be* @return the passed in String with spaces appended until the*         length matches the specified length.*/ColorBuffer pad(ColorBuffer str, int len) {while (str.getVisibleLength() < len) {str.append(" ");}return append(str);}ColorBuffer center(String str, int len) {StringBuilder buf = new StringBuilder(str);while (buf.length() < len) {buf.append(" ");if (buf.length() < len) {buf.insert(0, " ");}}return append(buf.toString());}ColorBuffer pad(String str, int len) {if (str == null) {str = "";}return pad(new ColorBuffer(str, false), len);}public String getColor() {return getBuffer(useColor);}public String getMono() {return getBuffer(false);}String getBuffer(boolean color) {StringBuilder buf = new StringBuilder();for (Object part : parts) {if (!color && part instanceof ColorAttr) {continue;}buf.append(part.toString());}return buf.toString();}/*** Truncate the ColorBuffer to the specified length and return* the new ColorBuffer. Any open color tags will be closed.* Do nothing if the specified length is <= 0.*/public ColorBuffer truncate(int len) {if (len <= 0) {return this;}ColorBuffer cbuff = new ColorBuffer(useColor);ColorAttr lastAttr = null;for (Iterator<Object> i = parts.iterator(); cbuff.getVisibleLength() < len && i.hasNext();) {Object next = i.next();if (next instanceof ColorAttr) {lastAttr = (ColorAttr) next;cbuff.append((ColorAttr) next);continue;}String val = next.toString();if (cbuff.getVisibleLength() + val.length() > len) {int partLen = len - cbuff.getVisibleLength();val = val.substring(0, partLen);}cbuff.append(val);}// close off the buffer with a normal tagif (lastAttr != null && lastAttr != NORMAL) {cbuff.append(NORMAL);}return cbuff;}@Overridepublic String toString() {return getColor();}public ColorBuffer append(String str) {parts.add(str);visibleLength += str.length();return this;}public ColorBuffer append(ColorBuffer buf) {parts.addAll(buf.parts);visibleLength += buf.getVisibleLength();return this;}private ColorBuffer append(ColorAttr attr) {parts.add(attr);return this;}public int getVisibleLength() {return visibleLength;}private ColorBuffer append(ColorAttr attr, String val) {parts.add(attr);parts.add(val);parts.add(NORMAL);visibleLength += val.length();return this;}public ColorBuffer bold(String str) {return append(BOLD, str);}public ColorBuffer lined(String str) {return append(LINED, str);}public ColorBuffer grey(String str) {return append(GREY, str);}public ColorBuffer red(String str) {return append(RED, str);}public ColorBuffer blue(String str) {return append(BLUE, str);}public ColorBuffer green(String str) {return append(GREEN, str);}public ColorBuffer cyan(String str) {return append(CYAN, str);}public ColorBuffer yellow(String str) {return append(YELLOW, str);}public ColorBuffer magenta(String str) {return append(MAGENTA, str);}private static class ColorAttr {private final String attr;public ColorAttr(String attr) {this.attr = attr;}@Overridepublic String toString() {return attr;}}public int compareTo(Object other) {return getMono().compareTo(((ColorBuffer) other).getMono());}
}

调用

ColorBuffer color = new ColorBuffer("sdfsdf", true);    
ColorBuffer color1 = new ColorBuffer( true);    
System.out.println(color.yellow("234234").magenta("77777").bold("55555").center("66666",9));
System.out.println(color1.yellow("234234").magenta("77777").bold("55555").center("66666",9));

输出

直接复制的文本,颜色显示不出来,自己可以尝试

sdfsdf2342347777755555  66666  
http://www.lryc.cn/news/463607.html

相关文章:

  • 关于定义结构体别名时 是否加*
  • 成语积累学习
  • 基于Java的茶叶商城设计与实现(源码+定制+开发)茶叶电商系统开发、茶叶电商平台开发、茶叶在线销售平台设计与开发
  • 桥接、NAT和仅主机三种网络模式对虚拟机IP地址分配的影响
  • 音乐播放器-0.专栏介绍​
  • 单月变现3W!AI助力沙雕图文爆红小绿书,12篇阅读量破10万+!
  • C语言复习第4章 数组
  • 大数据研究实训室建设方案
  • Unity3D 观察者模式
  • vue从0开始的项目搭建(含环境配置)
  • 力扣61~65题
  • API接口开发流程与指南
  • 如何在Android中进行日志打印和调试?
  • Linux基本使用和程序部署
  • 照片编辑成动态视频用什么软件好
  • JavaWeb合集-SpringBoot项目配套知识
  • Electron入门笔记
  • python 不相交集简介(并查集算法)【Introduction to Disjoint Set (Union-Find Algorithm)】
  • 23种设计模式之工厂方法模式
  • Redis——事务
  • Redis非关系型数据库操作命令大全
  • 基于SpringBoot+Vue+uniapp微信小程序的澡堂预订的微信小程序的详细设计和实现
  • Linux mips架构链接库函数调用plt表汇编代码分析
  • python 作业1
  • Apache 出现 “403 forbidden“ 排查方法
  • vue video播放m3u8监控视频
  • uniapp 获取签名证书 SHA1 自有证书签名打包
  • Open3d开发点云标注工具问题总结(二)
  • 【FreeRTOS】
  • 洛谷 P4995:跳跳! ← 贪心算法