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

更新java控制台而不打印新行,java,console,Java,Console,所以,基本上我想做的是有一个百分比。所以它上升了0%,1%,等等,但是我不想把它全部打印出来,我想用2%替换%1%。因此,我知道如何为循环执行基本的,但我不知道如何使用\r或\b,因为在我的编译器中,我得到的只是在一行中打印所有内容 package test; public class est { public static void main(String[] args) { for(int i = 0; i <= 100; i++ )

所以,基本上我想做的是有一个百分比。所以它上升了0%,1%,等等,但是我不想把它全部打印出来,我想用2%替换%1%。因此,我知道如何为循环执行基本的
,但我不知道如何使用
\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 + "%");
        }
    }
}


所以它打印100行;但我只想在一行上看到这些信息。

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

package test;

public class est
{
    public static void main(String[] args) 
    {       
        for(int i = 0; i <= 100; i++ )
        {
            System.out.print("\rPercent = " + i + "%");
        }
    }
}
即使这样,“返回”和删除信息也不能在每个平台上都有效

您有三种选择:

  • 简单地接受它。在现实世界中,命令行输出通常是丑陋的,大多数人都接受这一点
  • 查看基于“curses”的库,因为这些库允许“放置”和“重置”您的“游标”。但我实际上不能说这些库有多独立于平台 LI>下整整九码,考虑创建一个真正的向导。当然,这是解决你的问题最昂贵的办法
我尝试在sysout中使用'\r',它在Intellij Idea控制台中对我有效&从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);
    }
}
publicstaticvoidmain(字符串[]a)抛出InterruptedException{
int进度=10;

对于(progress=10;progress对于eclipse,您需要配置控制台来解释Ascii字符,如下所示


\r应该可以工作,但有些终端不支持。请参阅System.out或可能的副本,这不是您努力提供“增强的用户体验”的适当依据…是否有适当的依据?因此不能更新console或替换console中的文本?抱歉,这是因为我被您所说的话弄糊涂了。我本想重新投票,但被一个新问题转移到了一边。我现在刚刚投票:是否有库具有内置于jframe中的控制台,我可以让您着手创建像流氓一样?当我尝试运行eclipse时,它在eclipse上不起作用,它会打印单独的行。然而,当我在终端上运行它时,它工作得很好。干得好。
 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);
    }
}