一次\r引发的输出异常
这个bug好玩啊
这个小伙伴
只是把一个base64做了一个解码
然后呢
打印他的解码后的长度和内容
我们来看一下啊
打开长度是
内容就这么几个字符
就是很奇怪
而且大家发现了吗
前面这几个汉字都没有了
然后我们调试一下
打开这个字符串的内容
大家看这是没有问题的
只是呢注意看啊
我们这么看它是有\r的
所以呢我就怀疑跟这\r有关系
我们复制一下哈
然后呢终止一下
我们直接呀写一个字符串
注意它自动换成杠n了
我们换成杠r
好我们试一下
大家看跟刚才的情况是一样的
那为什么会这样呢
有的人说\r不就是回车吗
是的\r确实是回车
但是呢他不是换行
我们打开一个控台看一下
我们直接echo一个带\r的内容
正常linux的话
我们需要加一个"-e"啊
mac系统不用
我们就:a
然后呢:\rb
注意大家看!它打印的是b
那这时候如果打两个a呢
大家看打印的是b a
那如果打印3个a呢
大家看就是baa了
那为什么会这样呢
我们来看这word哈
现在呢我已经输出了aaa了
也就说aaa
现在呢我要输出杠r
那杠r是回车
到底是什么呢
就是他要回到这一行的最前面
就是把光标啊挪到最前面这个位置
然后这个时候再输入新的字符
它就会替换原来的字符
像这样b
所以它就变成了b a a
那我用word演示呢
也是因为word它自身有这个功能哈
我已经开启了这个改写模式
在Windows里边呢
(大家可以直接按那个insert键来切换)
所以我们再回到这个问题上
它打印完这个\r之后
又回到第一行(口误:这一行)的第一个位置
重新打印这些内容
所以就被覆盖了
只是idea和控制台(口误:终端)它有一点不同
也就是说同样的这个程序
如果我们在控制台(口误:终端)里打印
大家看啊
我去直接执行这个Test文件
我们:java Test
大家看
它会打印这个分号后边还有的内容
也就是说如果最后一行的内容它比较短
那么在终端里
它后边的字母串它还存在
没有被替换掉
但是如果我们在idea的终端(控制台)里边
只要输入了
那么前面的内容都会被清空了
它重新的输入这一行
最后更新于
这有帮助吗?