【问题标题】:How can I replace text that's been printed out on screen already in Java?如何替换已经在 J​​ava 中打印在屏幕上的文本?
【发布时间】:2012-07-31 10:38:47
【问题描述】:

我是 Java 新手,为了了解更多信息,我尝试制作一个时钟。它工作得很好,除了它每次一秒变化时都会在新行上打印。我该如何做才能用新时间替换已经打印出来的文本?

public class test {
    public static void main(String[] args) {
        test.clock();
    }
    public static void clock() {
        int sec = 0;
        int min = 0;
        int h = 0;
        for(;;) {
            sec++;
            if(sec == 60) {
                min++;
                sec = 0;
            } else if(min == 60) {
                h++;
                min = 0;
            } else if(h == 24) {
                h = 0;
            }
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            if(h < 10) {
                System.out.print("0"+h+":");
            } else {
                System.out.print(h+":");
            }
            if(min < 10) {
                System.out.print("0"+min+":");
            } else {
                System.out.print(min+":");
            }
            if(sec < 10) {
                System.out.println("0"+sec);
            } else {
                System.out.println(sec);
            }
        }       
    }
}

这是我的代码。这是我正在尝试做的一个例子: 我想转这个:00:00:00, 进入这个:00:00:01(代码会这样做,但它会打印在新行上并且不会删除旧时间)。 问题是我想摆脱第一个 (00:00:00) 并在同一行打印第二个 (00:00:01)。

这在 Java 中可行吗?

【问题讨论】:

标签: java string time replace clock


【解决方案1】:

这实际上与java无关。相反,您希望您正在显示的 控制台 覆盖文本。

这可以通过发送回车符(Java 中的 \r)而不是换行符(Java 中的 \n)来完成(在任何语言中)。所以你从不使用 println(),只有在你想这样做的时候才使用 print()。如果你在第一次打印之前添加一个 print("\r") 它应该做你想要的。

顺便说一句,如果您将整个时间构建在一个字符串中,然后一次全部输出,那将会更加优雅和简单:)

【讨论】:

  • 顺便说一句,eclipse可以那样做吗?当我测试它时它不起作用。
  • 不,Eclipse 控制台不支持。如果您从命令行运行您的类(使用 java 命令),它应该可以按预期工作(Windows 控制台支持它,任何 Unix 控制台也应该支持)。
  • 好的,谢谢!你知道是否有任何其他编译器可以支持它?如果我要在 cmd 中编译然后每次更改字母时都运行它,那么尝试的时间太长了。
  • 不,我使用 Eclipse 已经很多年了,从那以后就没有尝试过其他任何一种(无论如何它们都提供或多或少相同)。 IDE 中的控制台用于调试目的,所以我认为如果它们支持回车,那将无济于事,因为它可能会掩盖输出。一个简单的解决方法是创建一个 .cmd 文件(在 Windows 上),其中包含 java 命令,然后是 pause 命令。然后,您可以在桌面上放置一个快捷方式,它会完成所有工作。不是最舒服,但比命令行好一点?
【解决方案2】:

你可以做System.out.print("\u001B[A"); 使光标上一排。 以下是它的工作原理:

\u001B 是转义字符(27 ascii 码) [ 在转义字符之后 字母表示我们想用光标做什么

A:光标向上,B:光标向下,C:光标向右,D:光标向左,H:向左上角,M删除当前行,T:向上滚动,S:向下滚动, J: 删除所有向下到光标的行

警告这不适用于 cmd 或 powershell。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多