欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > java-推荐一个控制台输出颜色ANSI字符的类

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

2024/10/23 2:41:25 来源:https://blog.csdn.net/m0_60688978/article/details/143036921  浏览:    关键词: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  

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com