\r \n 区别心得

xjyr 2008-10-07 11:02:47
我自己编了几个程序,得出一个结论“在Windows中回车键是当做\r\n的组合来使用的,不是当做\n\r组合来使用”,网上很多文章我认为都说错了,
今给出2个程序
我不知道为什么发出的帖子格式是乱的,大家见谅


第一个:

/**
* 2008年10月7日10:41:02
* \n 与 \r 的区别
*/

import java.io.IOException;

class M {
public static void main(String[] args) {
int ch = (int)'\r';
System.out.printf("ch = %d\n", ch);

ch = (int)'\n';
System.out.printf("ch = %d\n", ch);

System.out.println("请输入一串字符:");
while (true) {
try {
ch = (int)System.in.read();
} catch(IOException e) {

}
System.out.printf("ch = %d",ch);
}
}
}


在JDK 1.6中的运行时按下回车键 所产生的效果:
----------------------------------
ch = 13
ch = 10
请输入一串字符:
ch = 13ch = 10
----------------------------------
本程序形象的说明了:
在Windows系统中回车键被当做\r\n 的组合来使用,
而不是当做\n\r来使用,网络上的文章说错了!

下面摘自摘自张孝祥:
-------------------------------------------------
当我们从键盘输入回车键时,Windows系统会把回车键
当做\r\n 来处理,Unix系统只会当做\n 来处理,不管
在什么系统中,都可以用\n来作为一行输入结束的标
记,只是在编程时我们需要注意,在Windows系统中我
们会读到\r 这个字符,我们必须把\r和正常输入的字
符区别开来,
-------------------------------------------------


第二个:

/**
* 2008年10月7日10:55:22
* 编程实现:把从键盘上输入的一串字符在显示器上
* 输出,如果输入的是byte,这4个字母,则程序退出
*/

import java.io.IOException;

public class ReadLine {
public static void main(String[] args) {
byte[] buf = new byte[1024];
int pos = 0;
int ch = 0;
String strInfo = null;

System.out.println("请输入一行字符:");
while (true) {
//读取一个字节的数据
try {
ch = System.in.read();
} catch (IOException e) {

}
// 要想使用IOException,必须加上
// import java.io.IOExcaption;
// 要使用Exception,则不需要导入,
// 因为Exception在java.lang包中

switch (ch) {
case '\r': //20行
break; //21行 如果把20 21行注释掉,则运行时输入byte回车键,程序是不会退出的,除非把24行的"byte"改为"byte\r", 才可以保证输入byte回车键,程序立即退出,因为在Windows系统中回车键是当做\r\n来处理的
case '\n':
strInfo = new String(buf, 0, pos); //把buf数组中索引从0开始的总共pos个元素取出来构造成一个String对象,
if (strInfo.equals("byte")) {//24行
return;
} else {
System.out.println(strInfo);
pos = 0;
break;
}
default:
buf[pos++] = (byte)ch; //ch是int类型,必须进行强制类型转化
}
}
}
}


在JDK 1.6中的运行结果是:
-------------------------------------
请输入一行字符:
nihao
nihao
藏三 上的
藏三 上的
byte
-------------------------------------
...全文
5231 33 打赏 收藏 举报
写回复
33 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Alex_sym 2012-02-18
JAVA C#技术联盟 qq群:211198659 希望和你共同奋斗!!!
  • 打赏
  • 举报
回复
CherryMs 2012-02-18
[Quote=引用 20 楼 bao110908 的回复:]
晕死,三年前回复的帖子竟然还在这里!
[/Quote]
哈哈 果哥威武
  • 打赏
  • 举报
回复
结贴是美德 2012-02-12
话说readLine()方法是靠什么识别行结束的?r?n?rn?

挖坟有时候也挺好哈~
  • 打赏
  • 举报
回复
J_ModestSea 2012-02-12
额.. 以前作业做记事本的时候知道一些..现在又学习啦!

刚看到回车换行,


13是回车 \r 将光标移动到 当前行的前面(此时插入符的纵坐标没有改变)

10换行 \n 将光标移动到 下一行(此时插入符的横坐标没有改变)

回车的本质就是将插入符移动到屏幕最左边。

插入符就是咱们说的光标.
  • 打赏
  • 举报
回复
Asgard_Hu 2012-01-09
[Quote=引用 3 楼 xjyr 的回复:]
牛中自有牛中人
[/Quote]
顶起
  • 打赏
  • 举报
回复
zxj823003 2012-01-09
top top top
  • 打赏
  • 举报
回复
daheipi 2012-01-08
牛人啊。。。。。
  • 打赏
  • 举报
回复
mengmolin 2011-12-28
好文章 ,顶了
  • 打赏
  • 举报
回复
ywbxmlg 2011-12-28
学习了...
  • 打赏
  • 举报
回复
coooliang 2011-11-29
哈哈!果哥牛B啊
  • 打赏
  • 举报
回复
makingjc 2011-11-29
妈啊!!!三年前的贴竟名复活了?????????????
  • 打赏
  • 举报
回复
iceberg_y 2011-11-29
学习了。。。。。。
  • 打赏
  • 举报
回复
izard999 2011-11-29
[Quote=引用 1 楼 bao110908 的回复:]

Windows 采用 \r\n 是有原因的,Windows 采用了传统的英文打字机的模式。

想想看英文打字机是如何换行的呢?英文打字机是选择将小车退回至起点,
这个过程称为回车(carriage return, CR),随后把小车调至下一行的位
置,这个过程称为换行(line feed, LF),这样就完成了英文打字机中换
行过程。

回车(CR)在计算机中使用 ASCII 为 ……
[/Quote]
果哥NB啊, 咱又长知识了
  • 打赏
  • 举报
回复
晕死,三年前回复的帖子竟然还在这里!
  • 打赏
  • 举报
回复
iceworldvip 2011-11-28
路过!看看!
  • 打赏
  • 举报
回复
小草也疯狂 2011-11-28
厉害 原来回车 换行是这么回事
  • 打赏
  • 举报
回复
huntor 2011-11-28
printf 里使用 %n 不使用 \n
  • 打赏
  • 举报
回复
quhuafeng521 2011-11-28
学习了。。。。。。
  • 打赏
  • 举报
回复
yuanboailanqiu 2011-11-28
学习一下下
  • 打赏
  • 举报
回复
xiangsiyu21945 2011-11-28
会用原来不牛B,牛B的是知道为什么这么用。
  • 打赏
  • 举报
回复
加载更多回复
相关推荐
发帖
Java SE
加入

6.2w+

社区成员

Java 2 Standard Edition
申请成为版主
帖子事件
创建了帖子
2008-10-07 11:02
社区公告
暂无公告