java控制台输出删除字符的一个小问题 10C

System.out.print("abc");
System.out.print("\b");
上面的程序在windows控制台中输出仍然是abc 并没有删除末尾的c
但是
System.out.print("ab\bc");
输出的结果为ac 删除了中间的b

我的问题是 为什么第一个程序中末尾的c没有被删除呢

多谢指导。。

3个回答

打个比方吧,你用计算机打字,输入ab,向前删除c,然后打印,结果是ac
但是如果你用的是打字机,那么已经白纸黑字印在纸上了,那就没法修改了。
一旦调用print,就将结果提交给操作系统去显示了,后面即便再有\b,也没法删除了。
但是在print内部,ab\bc,那么可以先对表达式求值得到ac,然后再输出。

VAFISH
VAFISH 回复aschouas: 因为eclipse不解析\b 所以你的输出ab_c是对的 _在eclipse控制台中是一个方框 但是在windows 或linux控制台中 是解析\b的 System.out.print("ab\bc");的输出确实是ac 并不是ab_c
大约 4 年之前 回复
VAFISH
VAFISH 这位前辈 按您所说的意思 如果代码是System.out.print("abc\b");的话 输出结果应该是ab才对 可是仍然是abc 不知道我有没有曲解您的意思。。
大约 4 年之前 回复
aschouas
一个治疗术 \b是退后一位,JAVA一个字节占2个字节,所以不会删除前一个字符。System.out.print("ab\bc"); 输出ab_c才是正解。如有问题,请指正。
大约 4 年之前 回复
aschouas
一个治疗术 \
大约 4 年之前 回复

System.out.print("abc");
System.out.print("\b");

\b是退格的意思,只是把输出的位置前移,并不是删除前一个字符。你想象以前的打字机,退格只是把打字的移到前一个字符的位置,只有重新输出新字符,才会覆盖原先的内容。
如:
System.out.print("abc");
System.out.print("\bd");
你会发现输出内容已经变成了:abd

shensky711
HansChen_ 回复VAFISH: 那就好,希望采纳~~
大约 4 年之前 回复
VAFISH
VAFISH 谢谢 你的结果是对的 明白了
大约 4 年之前 回复
shensky711
HansChen_ 即使是在以前的打印机,退格也不能抹去‘c’的痕迹的,你发现,c和d是重合在一起的
大约 4 年之前 回复

public static void progress(){

        for (int i = 1; i <= 100; i++) {
            System.out.print((i + "%"));
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            for (int j = 0; j <= String.valueOf(i).length(); j++) {
                System.out.print("\b");
            }
        }

}

这个程序实现控制台动态输出百分比 当i为一位数 如3 先输出3% 然后退格两位 接着输出4% 如果i为2位 如30 则先输出30% 然后退格3位 接着输出31%
如果白纸黑字 已成定局不能更改的话 为什么这个可以删除呢。。。

u010883376
每次取昵称想半天不想了 不可能照你说的那么输出 就好比每一次一个print是i次元,下面的回格是i+j次元的 无论如何都是碰不到一起的
大约 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐