首页 > 解决方案 > 如何使用带有彩色文本的 System.out.format

问题描述

我想为格式化的输出着色。但是彩色文本的格式被忽略了:

String leftAlignFormat = "| %-15s | %-15s |";
System.out.format(leftAlignFormat, "\033[38;5;16;48;5;40mHello\033[0m", "World");
| Hello | World           |

单词Hello的颜色正确,但为什么单词Hello的格式不正确?

标签: javaansi-colors

解决方案


Java 的 API 本身并不理解 ANSI 颜色转义码,因此format(...)API 将这些视为字符串中的字符。

但是当这些字符写入 ANSI 终端时,转义码不会移动光标,因此格式看起来不正确。

根据用例的复杂性,您将需要构建自己的包装 API(如果存在具有多种颜色的字符串),或者您可以通过确切知道添加多少额外字符来生成颜色来解决它,并增加您的相应的填充宽度。为简单起见,我建议始终预先添加颜色代码序列并附加重置,因此“额外”填充是固定数量。

另请记住,ANSI 转义码不可移植,因此您可能需要支持无颜色代码和模板路径,具体取决于您的目标执行环境


推荐阅读