老问题: Java 回车(\n)和换行(\r)的区别

以明会友 2007-08-08 11:31:00
public class Typetest
{
public static void main(String args[])
{
System.out.print("a");
System.out.print("\n");
System.out.print("b");
System.out.print("\r");
System.out.print("c");
System.out.println("a"+"\n"+"b"+"\r"+"c");
}
}

我把‘\n’和‘\r’互换多次,输出结果都是一样的,
a
b
ca
b
c

它们到底有什么区别???????????
...全文
7510 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaolingshi 2007-11-09
  • 打赏
  • 举报
回复
跟在\r后边的\n不起作用,其余情况都会触发\r或\n起到相应的作用
即\r是跳到下一行的行首并产生一空行,而\n仅仅是跳到下一行,不会产生空行
以明会友 2007-08-08
  • 打赏
  • 举报
回复
我在Java程序中调了半天还是不知道有什么区别,不过还是要谢谢各位了!!
yifuzhiming 2007-08-08
  • 打赏
  • 举报
回复
说了半天没什么区别啊
开心的D哥 2007-08-08
  • 打赏
  • 举报
回复
哦。。。学习一下。。。还有这种历史啊
xiaolingshi 2007-08-08
  • 打赏
  • 举报
回复
学习
zdjray 2007-08-08
  • 打赏
  • 举报
回复
不好意思,我\b的意思可能说错了
不过\n \r的区别可以参考下面

在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。

于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。

这就是“换行”和“回车”的来历,从它们的英语名字上也可以看出一二。

后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。

Unix系统里,每行结尾只有“<换行>”,即“\n”;Windows系统里面,每行结尾是“<换行><回车>”,即“\n\r”;Mac系统里,每行结尾是“<回车>”。一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。

以明会友 2007-08-08
  • 打赏
  • 举报
回复
还是不明白,‘\b’输出是个‘.’,怎么是回到行首,而且\n和\r的区别也没讲清楚啊,我上面的程序,无论\n和\r怎么互换,输出结果是一样怎么解释呢?
zdjray 2007-08-08
  • 打赏
  • 举报
回复
\n == \r\b

\r是换行
\b是回到行首
因为要写的下一行没有字符,所以直接到下一行首了
lilome 2007-08-08
  • 打赏
  • 举报
回复
\r 回车
\n 换行
joejoe1991 2007-08-08
  • 打赏
  • 举报
回复
好像think in java里有讲 不过偶忘了 学习一下
JAVA精华》,共47页,20多万字,推荐下载! 1 JAVA SE 1.1 深入JAVA API 1.1.1 Lang包 1.1.1.1 String类和StringBuffer类 位于java.lang包中,这个包中的类使用时不用导入 String类一旦初始化就不可以改变,而stringbuffer则可以。它用于封装内容可变的字符串。它可以使用tostring()转换成string字符串。 String x=”a” 4 ”c”编译时等效于String x=new StringBuffer().append(“a”).append(4).append(“c”).toString(); 字符串常量是一种特殊的匿名对象,String s1=”hello”;String s2=”hello”;则s1==s2;因为他们指向同一个匿名对象。 如果String s1=new String(“hello”);String s2=new String(“hello”);则s1!=s2; /*逐行读取键盘输入,直到输入为“bye”时,结束程序 注:对于回车换行,在windows下面,有'\r'和'\n'两个,而unix下面只有'\n',但是写程序的时候都要把他区分开*/ public class readline { public static void main(String args[]) { String strInfo=null; int pos=0; byte[] buf=new byte[1024];//定义一个数组,存放换行前的各个字符 int ch=0; //存放读入的字符 system.out.println(“Please input a string:”); while(true) { try { ch=System.in.read(); //该方法每次读入一个字节的内容到ch变量中。 } catch(Exception e) { } switch(ch) { case '\r': //回车时,不进行处理 break; case '\n': //换行时,将数组总的内容放进字符串中 strInfo=new String(buf,0,pos); //该方法将数组中从第0个开始,到第pos个结束存入字符串。 if(strInfo.equals("bye")) //如果该字符串内容为bye,则退出程序。 { return; } else //如果不为bye,则输出,并且竟pos置为0,准备下次存入。 { System.out.println(strInfo); pos=0; break; } default: buf[pos ]=(byte)ch; //如果不是回车换行,则将读取的数据存入数组中。 } } } } String类的常用成员方法 1、 构造方法: String(byte[] byte,int offset,int length);这个在上面已经用到。 2、 equalsIgnoreCase:忽略大小写的比较,上例中如果您输入的是BYE,则不会退出,因为大小写不同,但是如果使用这个方法,则会退出。 3、 indexOf(int ch);返回字符ch在字符串中首次出现的位置 4、 substring(int benginIndex); 5、 substring(int beginIndex,int endIndex); 返回字符串的子字符串,4返回从benginindex位置开始到结束的子字符串,5返回beginindex和endindex-1之间的子字符串。 基本数据类型包装类的作用是:将基本的数据类型包装成对象。因为有些方法不可以直接处理基本数据类型,只能处理对象,例如vector的add方法,参数就只能是对象。这时就需要使用他们的包装类将他们包装成对象。 ......

62,612

社区成员

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

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