From 4980f0d1f611ada2eee5537a179ddf7f2942680b Mon Sep 17 00:00:00 2001 From: database-mysql Date: Mon, 3 Aug 2026 17:09:41 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20echo=E5=8D=81=E5=85=AD?= =?UTF-8?q?=E8=BF=9B=E5=88=B6=E5=BD=A9=E8=89=B2=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/utils/library/utils/print/echo.java | 28 ++++++++++++++++-- src/test/java/echo.java | 8 +++++ src/test/java/echoTest.java | 29 +++++++++++++++++++ 3 files changed, 62 insertions(+), 3 deletions(-) create mode 100644 src/test/java/echoTest.java diff --git a/src/main/java/top/gtb520/java/gnu/java/utils/library/utils/print/echo.java b/src/main/java/top/gtb520/java/gnu/java/utils/library/utils/print/echo.java index 7fb8ce9..83e40ea 100644 --- a/src/main/java/top/gtb520/java/gnu/java/utils/library/utils/print/echo.java +++ b/src/main/java/top/gtb520/java/gnu/java/utils/library/utils/print/echo.java @@ -8,13 +8,35 @@ public class echo { // 终端彩色打印 /** - * 使用自定义十六进制颜色码在终端打印彩色文本 + * 使用自定义颜色码在终端打印彩色文本 + * 支持三种格式: + * - "#RRGGBB" 十六进制颜色(如 "#FFC0CB") + * - ANSI 颜色代码(如 "31" 表示红色) + * - ANSI 扩展色(如 "38;5;208" 表示扩展色) * * @param Message 要打印的文本内容 - * @param HexColor ANSI 颜色代码(如 "31" 表示红色,"38;5;208" 表示扩展色) + * @param HexColor 颜色代码,支持 "#RRGGBB"、ANSI 颜色代码或扩展色 */ public static void ColorHexPrintln(String Message, String HexColor) { - System.out.println("\033[" + HexColor + "m" + Message + "\033[0m"); + if (HexColor.startsWith("#") && (HexColor.length() == 7 || HexColor.length() == 4)) { + // #RRGGBB 或 #RGB 格式,转换为 ANSI 真彩色序列 + String hex = HexColor.substring(1); + int r, g, b; + if (hex.length() == 3) { + // #RGB 简写格式,将每个字符扩展为两位(如 F -> FF) + r = Integer.parseInt(String.valueOf(hex.charAt(0)), 16) * 17; + g = Integer.parseInt(String.valueOf(hex.charAt(1)), 16) * 17; + b = Integer.parseInt(String.valueOf(hex.charAt(2)), 16) * 17; + } else { + r = Integer.parseInt(hex.substring(0, 2), 16); + g = Integer.parseInt(hex.substring(2, 4), 16); + b = Integer.parseInt(hex.substring(4, 6), 16); + } + System.out.println("\033[38;2;" + r + ";" + g + ";" + b + "m" + Message + "\033[0m"); + } else { + // 原有 ANSI 颜色代码直接拼接 + System.out.println("\033[" + HexColor + "m" + Message + "\033[0m"); + } } /** diff --git a/src/test/java/echo.java b/src/test/java/echo.java index cbfc41c..58eaeb2 100644 --- a/src/test/java/echo.java +++ b/src/test/java/echo.java @@ -9,5 +9,13 @@ public class echo { main.echo.Println("PURPLE", ColorNameEnum.PURPLE); main.echo.Println("GREEN", ColorNameEnum.GREEN); main.echo.Println("RED", ColorNameEnum.RED); + + ColorHexPrintlnTest(); + } + + static void ColorHexPrintlnTest() { + main.echo.ColorHexPrintln("ColorHexPrintlnTest_RED", "31"); + main.echo.ColorHexPrintln("自定义橙色", "38;5;208"); + main.echo.ColorHexPrintln("十六进制粉色", "#FFC0CB"); } } diff --git a/src/test/java/echoTest.java b/src/test/java/echoTest.java new file mode 100644 index 0000000..025e77d --- /dev/null +++ b/src/test/java/echoTest.java @@ -0,0 +1,29 @@ +import top.gtb520.java.gnu.java.utils.library.main; +import top.gtb520.java.gnu.java.utils.library.utils.print.ColorNameEnum; + +public class echoTest { + public static void main(String[] args) { + System.out.println("========== echo 测试开始 =========="); + + // 测试 #RRGGBB 格式 + main.echo.ColorHexPrintln("十六进制粉色 #FFC0CB", "#FFC0CB"); + main.echo.ColorHexPrintln("十六进制红色 #FF0000", "#FF0000"); + main.echo.ColorHexPrintln("十六进制绿色 #00FF00", "#00FF00"); + main.echo.ColorHexPrintln("十六进制蓝色 #0000FF", "#0000FF"); + + // 测试 #RGB 简写格式 + main.echo.ColorHexPrintln("RGB简写粉色 #F0F", "#F0F"); + main.echo.ColorHexPrintln("RGB简写白色 #FFF", "#FFF"); + + // 测试原有 ANSI 颜色代码(兼容性) + main.echo.ColorHexPrintln("ANSI红色 31", "31"); + main.echo.ColorHexPrintln("ANSI扩展色 38;5;208", "38;5;208"); + + // 测试预定义颜色枚举 + main.echo.Println("枚举红色", ColorNameEnum.RED); + main.echo.Println("枚举绿色", ColorNameEnum.GREEN); + main.echo.Println("枚举黄色", ColorNameEnum.YELLOW); + + System.out.println("========== echo 测试完成 =========="); + } +}