Java 退格转义

2022-09-03 05:18:57

我刚刚测试了退格转义,如下所示:

System.out.println("Hello\b");

我期望得到输出:地狱
但它是:“你好”与一个方形块

有人知道java如何处理这个问题吗?


答案 1

Java根本不“处理”该字符。它所知道的只是一个字节流,操作系统说它可以写入字节,并且它会很乐意将字节写入其中,包括ASCII退格。

当流接收到该字符时会发生什么与Java没有任何关系,它完全依赖于终端。有些终端会擦除前一个字符,有些会将退格字符显示为一些奇怪的字形,甚至显示为特殊的“退格字符”字形。有些人如果无法解释字符,可能会完全删除它,其他人(实际上是大多数终端仿真器)的行为会有所不同,具体取决于它们的配置方式。但这一切都与Java无关,无论它们是由Java或Perl或C++或其他任何东西编写的,它们都会以这种方式运行。printcout


答案 2

要获得所需的输出,即 您需要在 之后添加一个字符。因为只会将光标(虚拟)向后移动到1个位置,但它不会删除它。您所能做的就是将要删除的字符替换为 。因此,请尝试以下行作为输出:Hellspace\b\bspaceHell

System.out.println("Hello\b ");

PS :此解决方案适用于Windows OS和Ubuntu OS。对于其他操作系统,它的行为可能不同,如上面的@Kilian Foth所解释的那样。