更新java控制台而不打印换行

时间:2017-04-25 02:35:22

标签: java console

所以,基本上我想做的就是有一个百分比。所以它上升了0%,1%等等,但是,我不想将它全部打印出来,而是希望将%1%替换为2%。所以我知道如何进行基本for循环,但我不知道如何使用\r\b,因为在我的编译器中,所有我得到的是打印这一切都在一条线上。

package test;

public class est
{
    public static void main(String[] args) 
    {       
        for(int i = 0; i <= 100; i++ )
        {
            System.out.print("\rPercent = " + i + "%");
        }
    }
}

输出:

Percent = 0%
Percent = 1%

...

Percent = 99%
Percent = 100%

所以打印100行;但我只想在一行上获得这些信息。

3 个答案:

答案 0 :(得分:2)

简单的答案是:当您努力提供“增强的用户体验”时,System.out不是一个合适的基础。也许在这种情况下,您可以使用\ r来删除同一行上的。但是只要你需要/想要做 println()那个上下文就修复了;你不能再改变它了。

即便如此:“回头”并且无法以适用于每个平台的方式完成信息删除。

您有三种选择:

  • 简单地接受它。在现实世界中,命令行输出通常是丑陋的,大多数人都接受这一点。
  • 查看基于“curses”的库,因为它们允许“放置”和“重置”你的“光标”。但实际上我不能说这些库是如何独立于平台的。
  • 沿着整整九码开始考虑创建一个真正的指南。但是,当然,这是解决问题的最昂贵的解决方案。

答案 1 :(得分:1)

我尝试在sysout中使用'\ r',它在Intellij Idea控制台&amp;从mac osx的终端运行它。

 public static void main(String[] a) throws InterruptedException {
    int progress = 10;
    for(progress = 10; progress<=100; progress+=10) {
        System.out.print("\rPercent = " + (progress) + "%");
        Thread.sleep(3000);
    }
}

您可能想尝试一下。 但是,我坚信它将依赖于底层控制台和操作系统。

答案 2 :(得分:0)

对于Eclipse,您需要配置控制台来像这样解释Ascii字符

enter image description here