修复 echo十六进制彩色打印

This commit is contained in:
2026-08-03 17:09:41 +08:00
parent c1d105939b
commit 4980f0d1f6
3 changed files with 62 additions and 3 deletions

View File

@@ -8,14 +8,36 @@ public class echo {
// 终端彩色打印 // 终端彩色打印
/** /**
* 使用自定义十六进制颜色码在终端打印彩色文本 * 使用自定义颜色码在终端打印彩色文本
* 支持三种格式:
* - "#RRGGBB" 十六进制颜色(如 "#FFC0CB"
* - ANSI 颜色代码(如 "31" 表示红色)
* - ANSI 扩展色(如 "38;5;208" 表示扩展色)
* *
* @param Message 要打印的文本内容 * @param Message 要打印的文本内容
* @param HexColor ANSI 颜色代码(如 "31" 表示红色,"38;5;208" 表示扩展色 * @param HexColor 颜色代码,支持 "#RRGGBB"、ANSI 颜色代码或扩展色
*/ */
public static void ColorHexPrintln(String Message, String HexColor) { public static void ColorHexPrintln(String Message, String HexColor) {
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"); System.out.println("\033[" + HexColor + "m" + Message + "\033[0m");
} }
}
/** /**
* 使用预定义的颜色名称在终端打印彩色文本 * 使用预定义的颜色名称在终端打印彩色文本

View File

@@ -9,5 +9,13 @@ public class echo {
main.echo.Println("PURPLE", ColorNameEnum.PURPLE); main.echo.Println("PURPLE", ColorNameEnum.PURPLE);
main.echo.Println("GREEN", ColorNameEnum.GREEN); main.echo.Println("GREEN", ColorNameEnum.GREEN);
main.echo.Println("RED", ColorNameEnum.RED); 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");
} }
} }

View File

@@ -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 测试完成 ==========");
}
}