Как сделать резервную копию строки после новой строки, отправленной пользователем?Джава - PullRequest
5 голосов
/ 10 мая 2011

Предположим, вы просите пользователя предоставить вам некоторые данные через консольное приложение на Java.Они делают и ударил Enter.Вы получаете строку и делаете что-то в ответ.Скажем, вы вычисляете какое-то значение на основе ввода пользователя и распечатываете его.

Как я могу распечатать ответ в той же строке, что и ввод пользователя?Я хотел бы (возможно) удалить символ новой строки и распечатать ответ рядом с его вводом.

Пожалуйста, посоветуйте, как это сделать с помощью Java.

Спасибо.

Ответы [ 3 ]

3 голосов
/ 10 мая 2011

Вы не можете управлять Консолью через базовую Java. Я думаю, что вы можете использовать JLine для управления Консолью. В java 6 у вас есть класс java.io.Console, через который вы можете отобразить звездочку *, когда пароль должен быть прочитан.http://blogs.oracle.com/alanb/entry/java_io_console_is_finally

1 голос
/ 10 мая 2011

Я попытался реализовать это с помощью библиотеки 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 голосов
/ 10 мая 2011

Можно с 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 ();
        }
}
...