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,你只是删除换行符…