Java如何在接收用户输入后将输出与输入展示在同一行
问题原因
\b退格符仅能对当前行的光标位置进行回退操作。你调用Scanner.nextByte()接收用户输入时,用户按下回车确认输入的动作会触发控制台直接换行,光标已经跳转至下一行行首,后续输出的\b无法操作上一行的内容,因此无法实现同屏展示的需求。
可行解决方案
大多数现代终端(包括IDEA、VSCode内置控制台、Win10及以上版本的cmd/PowerShell)都支持ANSI转义序列,你可以通过ANSI序列控制光标位置实现需求,示例代码如下:
import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("Enter a number: "); byte number = scanner.nextByte(); // \033[1A 控制光标上移1行,\033[K 清除光标位置到行尾的内容 System.out.print("\033[1A\033[K"); // 重新输出整行内容 System.out.println("Enter a number: " + number); scanner.close(); } }
运行后最终展示效果为单行内容:Enter a number: 23
如果你使用的是Win10以下的旧版cmd,不支持ANSI序列,可以通过修改注册表开启支持:执行命令reg add HKCU\Console /v VirtualTerminalLevel /t REG_DWORD /d 1后重启终端即可生效。
内容的提问来源于stack exchange,提问作者Gon49
相关产品推荐
相关产品推荐

