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

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

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

多谢指导。。

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

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%
如果白纸黑字 已成定局不能更改的话 为什么这个可以删除呢。。。

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

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