Java中回车符\r运行结果与教程不一致,求成因解答
问题解答:Java回车符
\r输出不符预期的原因 核心原理
回车符\r的原生语义是将输出光标移动到当前行的行首位置,不会触发换行,后续输出的字符会从行首开始逐位覆盖当前行已有的内容。
对应代码输出逐一解释
第一段代码String txt = "Hello\rWorld!"
- 程序先输出
Hello5个字符,此时光标停在o的右侧 - 遇到
\r后光标直接跳转回当前行首,后续输出World!共6个字符,刚好完全覆盖之前输出的Hello和后续1个空位,最终该行显示内容为World!,和运行结果一致。
第二段代码String txt2 = "Trying\rthis"
- 程序先输出
Trying共6个字符,光标停在g的右侧 - 遇到
\r后光标跳转回行首,后续输出this共4个字符,仅覆盖前4位的Tryi,剩下的第5、6位原有的ng未被覆盖保留了下来,最终该行显示内容拼接后就是thisng,和运行结果完全匹配。
和教程结果不一致的原因
教程的在线运行环境对回车符做了非标准的特殊处理:要么是自动将\r替换为换行符\n输出,要么是模拟输出框没有实现原生终端的光标回退覆盖逻辑,才会出现和本地不同的结果。你在本地终端、VSCode内置终端得到的结果,才是符合\r语义的标准运行结果。
内容的提问来源于stack exchange,提问作者user7533628
相关产品推荐
相关产品推荐

