用控制字符删除多行控制台内容
我知道在控制台中,可以用一些特殊字符把光标移回当前行的开头(\r
),或者只移动一个字符(\b
)来覆盖之前的内容。现在我想知道,如何用控制字符来覆盖多行内容。
我在控制台上打印了一个点阵:
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
然后我想回到第一个字符的位置,重新绘制它。
. . . . . . . .
. . . 0 . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
我不太确定这段代码会用什么编程语言,所以我希望解决方案能使用字符来实现。
1 个回答
0
(以下内容仅适用于你没有在Swing JPanel或类似的环境中自己渲染输出的情况)
要注意的是,从控制台输出设备得到的模拟效果是非常有限的。通常情况下,你可以期待按下Ctrl-H会删除光标前的字符,按下Ctrl-M会把光标移到行的开头。超过这些功能就需要额外的设置了。
历史上,这种效果是通过发送ANSI转义序列来实现的(这和物理的VT100终端很相似),这些序列可以用来移动光标、清除显示器的某些部分和切换颜色。你需要在输出设备中使用类似的东西。关于Windows中的CMD.EXE,查看如何让win32控制台识别ANSI/VT100转义序列?以获取建议。Linux和OS X的终端模拟器支持这些功能。
然后你可以自己生成这些转义序列——对于简单的需求来说,这相对容易——或者使用一个curses/ncurses库来实现你需要的功能。