java - 如何使用带有彩色文本的 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的格式不正确?
解决方案
Java 的 API 本身并不理解 ANSI 颜色转义码,因此format(...)
API 将这些视为字符串中的字符。
但是当这些字符写入 ANSI 终端时,转义码不会移动光标,因此格式看起来不正确。
根据用例的复杂性,您将需要构建自己的包装 API(如果存在具有多种颜色的字符串),或者您可以通过确切知道添加多少额外字符来生成颜色来解决它,并增加您的相应的填充宽度。为简单起见,我建议始终预先添加颜色代码序列并附加重置,因此“额外”填充是固定数量。
另请记住,ANSI 转义码不可移植,因此您可能需要支持无颜色代码和模板路径,具体取决于您的目标执行环境
推荐阅读
- twitter - 如何使用 tweepy 只获得新的关注者?
- typescript - NestJs项目中枚举的使用
- python - 用于解析 xml 文件并对 uuid 进行排序的 Python 脚本
- python - 当我尝试在我的 macOS 上编译 skia 时出现跳过“../src”错误 [我试图编译 aseprite]
- vim - 在 Vim 中以编程方式关闭多个缓冲区
- c++ - 快速 C++ 查询 RE 从函数返回字符串
- dotnetnuke - 内置 2sxc 操作缺少图标
- php - 为什么 Recaptcha 不能使用带参数的 url?
- r - R ifelse 多个条件
- perl - 如果 Perl 已经链接到 libm,为什么没有任何功能向用户公开?