如何在用户提交新行后备份行?爪哇岛

How to back up a line after a new line submitted by a user? Java

提问人:James Raitsev 提问时间:5/10/2011 更新时间:5/10/2011 访问量:1149

问:

假设,您要求用户通过 Java 中的控制台应用程序为您提供一些输入。他们做并击中.你得到字符串并做一些事情作为回应。比如说,你根据用户的输入计算一些值,然后打印出来。Enter

如何在与用户输入相同的行上打印出响应?我想(可能)删除一个新行字符,并在他的输入旁边打印出一个响应。

请告知如何使用 Java 执行此操作。

谢谢。

Java 输入 控制台

评论


答:

3赞 crackerplace 5/10/2011 #1

你不能通过基本的Java来控制控制台,我认为你可以使用JLine来控制java 6 Console.In 你有java.io.Console类,当必须读取密码时,你可以通过它来回显星号*。http://blogs.oracle.com/alanb/entry/java_io_console_is_finally

1赞 James Jithin 5/10/2011 #2

我试图在库的帮助下实现它,这是您正在寻找的东西的演示jcurses

import jcurses.system.CharColor;
import jcurses.system.InputChar;
import jcurses.system.Toolkit;

public class TestClass {

    public static void main(String[] args) {

        try {
            CharColor printColor = new CharColor(CharColor.BLACK, CharColor.WHITE);


            int i = 0;
            int j = 0;
            while (true) {
                StringBuilder str = new StringBuilder();
                InputChar c = null;

                do {
                    c = Toolkit.readCharacter();                  //Read each character
                    if (c.getCharacter() != 10) {                 //Do not print character if Return key
                        str.append(c);
                        Toolkit.printString(String.valueOf(c), i++, j, printColor);   //Print character as you type
                    }
                } while (c.getCharacter() != 10);
                Toolkit.printString(processInput(str.toString()), i, j++, printColor);
                i = 0;
                if (j == Toolkit.getScreenHeight()) {
                    Toolkit.clearScreen(printColor);
                    j = 0;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static String processInput(String input) {
        return " Input processed";
    }
}
0赞 user unknown 5/10/2011 #3

您可以使用 ANSI 代码。在 Linux 中,我使用它们从来没有问题,但在 Windows 上,您必须先安装ANSI.SYS。

import java.util.Random;

public class AnsiMove
{
        public AnsiMove ()
        {
                Random random = new Random ();
                System.out.print ("ESC[2J");

                for (int i = 0; i < 10000; ++i)
                {
                        int y = random.nextInt (23) + 1;
                        int x = random.nextInt (79) + 1;
                        char c = (char) (random.nextInt (95) + 32);

                        gotoXY (x, y);
                        System.out.print (c);
                        pause (1);
                }
        }

        void pause (int p)
        {
                try
                {
                        Thread.sleep (p);
                }
                catch (InterruptedException e)
                {
                        System.err.println (e);
                }
        }

        void gotoXY (int x, int y)
        {
                System.out.print ("ESC[" + y + ';' + x + 'H');
        }

        /** */
        public static void main (String args[])
        {
                new AnsiMove ();
        }
}