Возврат в консоль Java?

Есть ли способ, которым вы можете удалить некоторые буквы / слова, которые ввел пользователь?

Я создаю игру со скремблером слов, и прежде чем сделать ее с графическим интерфейсом, я делаю некоторые консольные вещи. Поскольку я использую сканер, когда первый игрок вводит слово, оно остается там. Таким образом, второй игрок может просто смотреть на него, когда угадывает зашифрованное слово.
Можно ли как-нибудь удалить это слово из консоли? Или сделать так, чтобы это отображалось как * * * *?
Я бы предпочел не иметь System.out.println("\n\n\n....");
Это сделало бы ввод внизу, а я бы хотел, чтобы он был вверху. Могу ли я удалить то, что вводил пользователь, или сделать так, чтобы оно отображалось как * * * * * *?
Спасибо. :)


person Henry Harris    schedule 26.07.2012    source источник
comment
Этот ответ должен вам помочь: stackoverflow.com/a/3328871/1438307   -  person Benoit    schedule 27.07.2012


Ответы (1)


Имейте в виду, что делать это в графическом интерфейсе на самом деле намного проще, чем в Scanner IMOP.

Один из способов сделать это с помощью Scanner — создать поток, который стирает символы по мере их ввода и заменяет их символами *.

EraserThread.java

import java.io.*;

class EraserThread implements Runnable {
   private boolean stop;

   /**
    *@param The prompt displayed to the user
    */
   public EraserThread(String prompt) {
       System.out.print(prompt);
   }

   /**
    * Begin masking...display asterisks (*)
    */
   public void run () {
      stop = true;
      while (stop) {
         System.out.print("\010*");
     try {
        Thread.currentThread().sleep(1);
         } catch(InterruptedException ie) {
            ie.printStackTrace();
         }
      }
   }

   /**
    * Instruct the thread to stop masking
    */
   public void stopMasking() {
      this.stop = false;
   }
}

поле_пароля.java

public class PasswordField {

   /**
    *@param prompt The prompt to display to the user
    *@return The password as entered by the user
    */
   public static String readPassword (String prompt) {
      EraserThread et = new EraserThread(prompt);
      Thread mask = new Thread(et);
      mask.start();

      BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
      String password = "";

      try {
         password = in.readLine();
      } catch (IOException ioe) {
        ioe.printStackTrace();
      }
      // stop masking
      et.stopMasking();
      // return the password entered by the user
      return password;
   }
}

основной метод

class TestApp {
   public static void main(String argv[]) {
      String password = PasswordField.readPassword("Enter password: ");
      System.out.println("The password entered is: "+password);
   }
}

Я проверил это и работает для меня.

Дополнительная информация:

person Frank Visaggio    schedule 26.07.2012