Java退格逃脱

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

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

我希望得到输出:地狱
但它是:“你好”的方块

有谁知道java如何处理这个?

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

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

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

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

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

它应该在Windows命令控制台中完美运行。 这个bug可以识别为Eclipse bug: bug 76936 。 另请参阅如何使退格\ b在Eclipse的控制台中工作?

尝试使用终端执行您的类文件。

  java classname 

当IDE执行\ b时,它会自动忽略它。 因为IDE中没有相应的库来运行\ b。 但是,如果您在终端中运行它们,则可以执行它。 所有终端都有该库。

您可能想要编写一个函数来执行此操作:

 def static public String backspace (String str){ return str.substring(0,str.length-1) } 

您正在使用System.out.println(“…”),它本质上是System.out.print(“… \ n”)

不要使用.println,你只是删除换行符…