\r,\n,\r\n的问题

joejoe1991 2008-04-21 06:24:22
请一定仔细看完贴子以后再回答!
这年头"回贴不看贴"(借用某人的一句话)的人太可怕了!


我现在对\r的理解:
将输入光标重置于行的开始处


以下JAVA代码:
public class a{
public static void main(String[] args) {
System.out.println("test\r123");
}
}


请在控制台下运行此JAVA代码,不要在IDE里面运行!


得到的结果是:
123t


我对这个结果的理解是:
先输出了:test
然后遇到\r
光标被重置于行的开始处,也就是字母t的前面,
然后又输出了123
这时123将原来的tes覆盖掉了!
所以最后的结果就是:123t



再看一个代码:
public class a{
public static void main(String[] args) {
System.out.println("test\n123");
}
}


这个不用说了,结果肯定是:
test
123


再看:
public class a{
public static void main(String[] args) {
System.out.println("test\r\n123");
}
}


结果还是:
test
123


这下问题来了:

先输出:test
在遇到\r的时候,光标不是已经被重置到行首了么?
那后面紧接着的
\n123
不是应该将原先输出的"test"全部覆盖掉么?
可是看实际输出的结果,就知道,并没有覆盖,这是怎么回事?


第二个问题:
既然\n就可以换行,那windows还用\r\n干什么?


或许问题有点弱智,还望大家指教!
谢谢回答!
...全文
85166 27 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
littleeeg 2011-11-04
  • 打赏
  • 举报
回复
学习了
事太多了,光一个字符编码就把我弄得头大了
zzh_my 2009-07-04
  • 打赏
  • 举报
回复
不错!~
artair 2009-04-04
  • 打赏
  • 举报
回复
就因为一件事,登陆上来留个言:
发现很多程序员,居然对dos界面或者字符界面下的环境太不熟悉。
如果想自己的编程能力提升一步,希望大家必须对命令行环境熟悉一些。

如果大家熟悉命令行环境下的文本编辑,就不会出现楼主的第一个问题了。

视窗环境下的记事本带给大家太多的误导。
hmsuccess 2008-04-26
  • 打赏
  • 举报
回复
学习
jeff_jian 2008-04-26
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 powerlee2008 的回复:]
\r 是回车,return ASCII = 0x13
\n 是换行,newline ASCII = 0x0a

windows下\r\n,linux或unix下\n
[/Quote]

//嗯,好像在MAC OS下面是\r
landyshouguo 2008-04-25
  • 打赏
  • 举报
回复
解释的很清楚了!
justicesun 2008-04-22
  • 打赏
  • 举报
回复
好像是:

windows \n
unix \r
linux \n\r
是不同文件系统的问题
我是风 2008-04-22
  • 打赏
  • 举报
回复
\r 是回车,return ASCII = 0x13
\n 是换行,newline ASCII = 0x0a

windows下\r\n,linux或unix下\n
老紫竹 2008-04-22
  • 打赏
  • 举报
回复
回车 = 光标到达最左侧
换行 = 移到下一行

这个没啥可说的!

如果只回车,打印的东西会覆盖同行以前的内容

如果只换行,打印的东西会在下一行的先一个位置继续,比如
==========
#########
wren4255 2008-04-22
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 joejoe1991 的回复:]
顶啊,为什么每次我的贴子都没多少人看呢????
[/Quote]

一起等,看来只有火龙和斑竹来才行啊!
问题不错
joejoe1991 2008-04-22
  • 打赏
  • 举报
回复
等待高人。。。。。。。。。。。。。。。。。
joejoe1991 2008-04-21
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 Steve_Samuelson 的回复:]
在windows下,\r\n出现的结果应该是光标移到行首,然后读到"\n"光标移到下行行首。
这样就出现了
test
123
的结果。
[/Quote]

请看我在八楼的回复
Steve_Samuelson 2008-04-21
  • 打赏
  • 举报
回复
在windows下,\r\n出现的结果应该是光标移到行首,然后读到"\n"光标移到下行行首。
这样就出现了
test
123
的结果。
joejoe1991 2008-04-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 chen09 的回复:]
回车换行符,是2个符。
一个回车,一个换行。
一个是控制屏幕或者从键盘的Enter键输入。
另一个是控制“打印机”!

0d0a问题,是打印机时代留下的问题,LZ如果用过没有屏幕的,只有卷纸输出的机器,就可以知道,如果向打印机发送一个回车符是没有用的,只有发换行符才有用。

知道了\r\n的本质区别,LZ就可以搞清楚到底怎么回事儿了吧?
[/Quote]

您并没有回答我的问题。
richard_2010 2008-04-21
  • 打赏
  • 举报
回复
3l已经回答很好了,不再重复
Shine_Panda 2008-04-21
  • 打赏
  • 举报
回复
在测试帮你顶啊。
lz................
不急落!!!
Shine_Panda 2008-04-21
  • 打赏
  • 举报
回复
在测试并帮你顶啊
lz ..............................
不急落!!!
Shine_Panda 2008-04-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 caoyinghui1986 的回复:]
Java转义符
转义序列 标准形式 功能描述
\n NL 回车换行
\t HT 水平制表符
\b BS 后退一格
\r CR 回车不换行
\f FF 换页
\' ' 单引号
\\ \ 反斜杠
\" " 双引号
\ddd 0ddd 八进制模式
\xddd 0xddd 十六进制模式
\udddd 0xdddd Unicode双字节字符
看了你的问题我也查了一下 做了一个测试
发现 :
\r 会去掉 从左边起 同右边相同位数的字符串,并把字符串置到右边.
如:
test\r123-->1…
[/Quote]

根据我自己的测试结果我提出了一种设想:

就是\r 将右边的内容 置到行首 并依次覆盖。
只样就刚好可以解释上面我测试的这个现象。

test\r123-->123t
atest\r123-->123st
aatest\r133-->12est


test\r1234-->1234
atest\r1234-->1234t
aatest\r1334-->1234st

joejoe1991 2008-04-21
  • 打赏
  • 举报
回复
顶啊,为什么每次我的贴子都没多少人看呢????
joejoe1991 2008-04-21
  • 打赏
  • 举报
回复
回5楼:

楼主,我个人认为是这样的,在遇到\r的时候,光标已经被重置到行首了,但是接下来执行了\n还是换行了, 
之后才输出的123而不是把\n123覆盖前面的。不知说的对不?高手请指教!!


既然在遇到\r的时候,光标被重置到行首,那后面的\n
为什么不会将已经输出的test
也换行下一行呢?

awusoft的猜想是,CMD下的\r\n只是将光标换行,光标后面的字符并不会被换行!
不像记事本等工具,按下回车,就会将光标后面的所有字符都换到下一行去。

不过也是猜想
加载更多回复(7)

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧