控制台執行 Java 程式時,使用者輸入的字元會即時回顯在終端機 (綠色/白色視終端機設定而定)。若不想看到輸入回顯,有兩種常見做法:
// 輸入資料存放在 data.txt
Scanner scanner = new Scanner(new File("data.txt"));
while (scanner.hasNext()) {
String input = scanner.nextLine();
// 處理 input
}
scanner.close();
Console console = System.console();
if (console != null) {
char[] password = console.readPassword("輸入密碼: "); // 不回顯
// 處理 password
} else {
// IDE 內建終端機通常回傳 null,需改用 Scanner
Scanner sc = new Scanner(System.in);
String input = sc.nextLine(); // 會回顯
}
readPassword 回傳 char[] 而非 String,較安全 (用畢可手動清零)。System.console() == null,此法失效。String input = JOptionPane.showInputDialog("請輸入:"); // 彈出視窗,無控制台輸出
提問者提到「綠色部分是輸入的」、「想把綠色去掉不讓它顯示」,且畫面顯示為 IDE 控制台。最簡單做法:**改用檔案輸入或單元測試**,完全避免控制台互動。若必須在控制台互動且不想回顯,僅能在真實終端機 (cmd, bash) 搭配 Console.readPassword 達成。
提問另一段提到「A 欄位不在資料庫,B 在資料庫,將 A 賦值給 B 後頁面報識別符無效」。這通常是 **ORM 映射錯誤**:
@Column(name="B") 欄位 b,但無 a 欄位。${entity.a} 導致 EL 找不到屬性。@Transient private String a; (不映射資料庫),並提供 getter/setter,或在 Controller 轉換為 DTO/VO 再傳給視圖。區分「控制台輸入回顯」與「ORM 欄位映射」兩個不同層面的問題,對症下藥。