Java控制输出:惊艳技巧与妙招,打造炫酷终端体验

233 阅读4分钟

iShot_2024-03-15_14.28.58.gif

在Java编程中,控制台输出是我们与程序交互的重要途径之一。虽然最基本的输出方式是使用System.out.println()方法,但是Java提供了许多强大的技巧和妙招,可以让我们的输出更加惊艳,为用户提供更加丰富的终端体验。本文将介绍一些Java控制输出的奇技淫巧,助你在编程路上踏上新的高峰。

1. 使用转义字符控制输出格式

Java中的转义字符可以在控制台输出中创建各种有趣的效果。例如,使用\b可以退格,\t可以产生制表符,\n可以换行,而\r则可以使输出光标回到当前行的开头。结合这些转义字符,可以精确地控制输出的格式和位置。

System.out.println("Loading..." + "\b\b\b\b\b\b\b\b\b\b" + "100%"); // 输出Loading...并立即删除,然后输出100%

2. 利用ANSI转义序列实现彩色输出

ANSI转义序列可以在控制台输出中添加颜色和样式,为用户提供更加丰富的视觉体验。在Java中,可以通过输出ANSI转义序列来实现彩色文本。以下是一些常用的颜色值:

  • \u001B[30m: 黑色
  • \u001B[31m: 红色
  • \u001B[32m: 绿色
  • \u001B[33m: 黄色
  • \u001B[34m: 蓝色
  • \u001B[35m: 紫色
  • \u001B[36m: 青色
  • \u001B[37m: 白色

此外,还可以使用以下特殊的颜色值:

  • \u001B[90m: 亮黑色
  • \u001B[91m: 亮红色
  • \u001B[92m: 亮绿色
  • \u001B[93m: 亮黄色
  • \u001B[94m: 亮蓝色
  • \u001B[95m: 亮紫色
  • \u001B[96m: 亮青色
  • \u001B[97m: 亮白色

通过输出这些ANSI转义序列,你可以为你的文本添加丰富多彩的色彩,增强用户体验,使程序输出更加生动有趣。

ANSI转义序列可以在控制台输出中添加颜色和样式,为用户提供更加丰富的视觉体验。在Java中,可以通过输出ANSI转义序列来实现彩色文本。

System.out.println("\u001B[31m" + "红色文本" + "\u001B[0m"); // 输出红色文本

3. 创建动态进度条

动态进度条是在长时间运行的任务中,向用户显示进度的有效方式。利用\r和动态更新的文本,可以创建一个动态进度条,实时反映任务的进度。

for (int i = 0; i <= 100; i++) {
    System.out.print("\rProgress: " + i + "%");
    Thread.sleep(100);
}

4. 艺术字输出

通过使用ASCII艺术字,可以使输出更具吸引力和创意。可以使用在线工具生成艺术字,然后在Java程序中输出。

System.out.println("██████╗░░█████╗░███╗░░░███╗███████╗███╗░░██╗███████╗");

5. 利用Unicode字符丰富输出

Java中支持Unicode字符集,可以使用各种特殊字符来装饰输出。例如,可以使用箭头、符号、表情等来增强输出的可读性和吸引力。

System.out.println("🚀 Java程序启动成功!");

通过掌握这些技巧和妙招,你可以让Java控制台输出更加生动有趣,提升用户体验。不断探索和尝试新的方法,挖掘Java输出的潜力,为你的程序增添更多的乐趣和魅力!

希望本文对你有所启发,欢迎分享你的想法和经验。Java控制输出,让我们一起创造更美好的编程世界!

======= 下面是我封装的进度条


import java.util.Scanner;

public class ProgressBar {
    private int totalSteps;
    private int currentStep;

    public ProgressBar(int totalSteps) {
        this.totalSteps = totalSteps;
        this.currentStep = 0;
    }

    public void updateProgress(int currentStep, int style) {
        this.currentStep = currentStep;
        double progress = (double) currentStep / totalSteps;
        int percent = (int) (progress * 100);
        StringBuilder progressBar = new StringBuilder();

        switch (style) {
            case 0:
                progressBar.append("[");
                for (int i = 0; i < 50; i++) {
                    if (i < progress * 50) {
                        progressBar.append("=");
                    } else {
                        progressBar.append(" ");
                    }
                }
                progressBar.append("] ");
                break;
            case 1:
                progressBar.append("[" + repeat("=", percent / 2) + ">");
                progressBar.append(repeat(" ", 50 - percent / 2) + "] ");
                break;
            case 2:
                progressBar.append("\u001B[34m[" + repeat("=", percent / 2) + ">");
                progressBar.append(repeat(" ", 50 - percent / 2) + "]\u001B[0m ");
                break;
            case 3:
                progressBar.append("\u001B[32m" + "\u001B[42m" + repeat(" ", percent / 2) + "\u001B[0m");
                progressBar.append("\u001B[31m" + "\u001B[41m" + repeat(" ", 50 - percent / 2) + "\u001B[0m ");
                break;
            case 4:
                progressBar.append("[");
                for (int i = 0; i < 50; i++) {
                    if (i < progress * 50) {
                        progressBar.append("█");
                    } else {
                        progressBar.append("░");
                    }
                }
                progressBar.append("] ");
                break;
            case 5:
                progressBar.append("[");
                for (int i = 0; i < 50; i++) {
                    if (i < progress * 50) {
                        progressBar.append("■");
                    } else {
                        progressBar.append("□");
                    }
                }
                progressBar.append("] ");
                break;
            case 6:
                progressBar.append("\u001B[32m[");
                for (int i = 0; i < 50; i++) {
                    if (i < progress * 50) {
                        progressBar.append("█");
                    } else {
                        progressBar.append("░");
                    }
                }
                progressBar.append("]\u001B[0m ");
                break;
            case 7:
                progressBar.append("\u001B[32m[");
                for (int i = 0; i < 50; i++) {
                    if (i < progress * 50) {
                        progressBar.append("■");
                    } else {
                        progressBar.append("□");
                    }
                }
                progressBar.append("]\u001B[0m ");
                break;
            case 8:
                progressBar.append("[");
                for (int i = 0; i < 50; i++) {
                    if (i < progress * 50) {
                        progressBar.append("|");
                    } else {
                        progressBar.append(".");
                    }
                }
                progressBar.append("] ");
                break;
            case 9:
                progressBar.append("[");
                for (int i = 0; i < 50; i++) {
                    if (i < progress * 50) {
                        progressBar.append("▓");
                    } else {
                        progressBar.append("░");
                    }
                }
                progressBar.append("] ");
                break;
        }

        progressBar.append(percent).append("%");
        System.out.print("\r" + progressBar.toString());
        if (currentStep == totalSteps) {
            System.out.println(); // 在完成时换行
        }
    }

    private String repeat(String str, int n) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < n; i++) {
            sb.append(str);
        }
        return sb.toString();
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入总步数:");
        int totalSteps = scanner.nextInt();

        ProgressBar progressBar;
        for (int style = 0; style < 10; style++) {
            progressBar = new ProgressBar(totalSteps);
            System.out.println("\n进度条样式 " + style + ":");
            for (int i = 0; i <= totalSteps; i++) {
                progressBar.updateProgress(i, style);
                try {
                    Thread.sleep(20); // 模拟进度更新需要的时间
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
        scanner.close();
    }
}