如何创建一个控制台应用程序来操作 system.out 中的文本?

5
例如,不要打印
/  
-  
\  
/  

在新的一行上,让它保持在一行上并成为一个旋转器动画?
4个回答

8

是的,打印一个 \b(退格)来删除最后一个字符。简而言之:

System.out.print('/');
System.out.print('\b');
System.out.print('-');
System.out.print('\b');
System.out.print('\\');
System.out.print('\b');

请注意,由于一个错误,这在Eclipse控制台中不起作用。然而,在命令控制台中,它应该可以正常工作。

这个能在多个平台上运行吗?无论是OSX使用的OpenJava还是Linux上的Oracle运行时,又或者是Windows上的Oracle运行时? - user328898
我可以确认这在 Windows、AIX 和 Linux 上可行。没有关于 OSX 的字眼,因为我不使用它,但是由于它是基于 Unix 的,如果在那里不能运行,我会感到相当惊讶。我建议你自己尝试一下。 - BalusC
我在一个无限循环中尝试了这个程序,它直到我退出程序才会打印出以下重复的模式:“/ - \”。我在Beanshell中尝试过,但它疯狂了。 :( - user328898

2
import java.io.*;
class Load_Animate
{
    static byte anime;
    static void animate(int i)
    {
        try
        {
            for(int j = 0 ; j<=100 ; j++)
            {
                switch(anime)
                {
                    case 1:
                        System.out.print("\r[ \\ ] :" + j + "%");
                        break;
                    case 2:
                        System.out.print("\r[ | ] :" + j + "%");
                        break;
                    case 3:
                        System.out.print("\r[ / ] :" + j + "%");
                        break;
                    default:
                        anime = 0;
                        System.out.print("\r[ - ] :" + j + "%");
                }
                anime++;
                Thread.sleep(i);
            }
        }
        catch(InterruptedException e)
        {
            System.out.println(e);
        }
    }
    public static void main(String args[]) throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int i = Integer.parseInt(br.readLine());
        animate(i);
    }
}

这是我所做的: 我使用了"\r",这是一个回车符,基本上将光标指向行的第一位置。


1
也许你应该在你的应用程序中实现一个命令行界面。这样,你就可以完全控制命令行的行为。像Clamshell-Cli这样的库可以帮助你处理大部分工作。

1

如果您需要文本光标定位,解决方案将需要通过JNI。您需要一些C光标定位软件,这将是不可移植的。Curses是15-20年前流行的应用程序。
问题是,您真的需要回到过去吗?


我正在为我的一个课程制作一个加密程序。由于它几乎全部是二进制和文本操作,将其保留在控制台中似乎可以减少所需的工作量。 - user328898

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接