Java中的回车(\r)和换行(\n)

来源:互联网 发布:淘宝买家评价多久清空 编辑:程序博客网 时间:2024/06/04 18:39

\n是换行符,这并不是java中的规定,而是更广泛的计算机领域中均为此含义。
1、提到\n就不能不提\r(回车),下面,详细讲解一下:
在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。
于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。
这就是“换行”和“回车”的来历,从它们的英语名字上也可以看出一二。
后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。
Unix系统里,每行结尾只有“<换行>”,即“\n”;
Windows系统里面,每行结尾是“<换行><回车>”,即“\n\r”;
Mac系统里,每行结尾是“<回车>”。一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。
\r回车是将光标移到一行的前面
\n是移到下一行
2、示例
System.out.print(“\n”);
如上代码表示在控制台中换一行
以上内容引自:https://zhidao.baidu.com/question/399628743.html

注意:在Java中nextInt()方法接收一个整型字符,不会读取\n,nextline()读入一行文本,会读入”\n”字符,但”\n”并不会成为返回的字符

例1:

import java.util.Scanner;/** * Created by Administrator on 2017/8/31. */public class Main {    public static void main(String[] args) {        Scanner sc=new Scanner(System.in);        while(sc.hasNext()) {            String s=sc.nextLine();            int k=sc.nextInt();            System.out.println(s);            System.out.println(k);        }    }}

来看一下上面代码的执行结果
这里写图片描述
当我输入abc时程序抛错:
当我进行第一轮次输入时:
s=’abcd\n\r’
k=’5\r’
此时控制台输入第一个5的那行还有一个‘\n’没有被读取
当我进行第二轮次输入时:
s=’\n’
k=’abc’
这时的s自动读到的上一次未读的‘\n’,我们再输入数时就是给k赋值了,而我输入的是abc所以抛错。
当然在真正运行程序时,并不会读取‘\n\r’以上仅为模拟,方便理解。真实读取情况如下:
当我进行第一轮次输入时:
s=’abcd’
k=’5’
此时控制台输入第一个5的那行还有一个‘\n’没有被读取
当我进行第二轮次输入时:
s=”
k=’abc’

例2:当我将上例中的剩余的‘\n’给‘吃掉’时,就不会出现错误

import java.util.Scanner;/** * Created by Administrator on 2017/8/31. */public class Main {    public static void main(String[] args) {        Scanner sc=new Scanner(System.in);        while(sc.hasNext()) {            String s=sc.nextLine();            int k=sc.nextInt();            String ss=sc.nextLine();            System.out.println(s);            System.out.println(k);        }    }}

来看一下上面代码的执行结果:
这里写图片描述
程序正常输入
当我进行第一轮次输入时:
s=’abcd\n\r’
k=’5\r’
ss=’\n’
此时控制台输入第一个5的那行还有一个‘\n’没有被读取
当我进行第二轮次输入时:
s=’abc\n\r’
k=”5\r
ss=’\n’

此时程序运行正常

例3:当我们在控制台进行输入输出容易抛出java.lang.NumberFormatException: For input string: “”错误

import java.util.Scanner;/** * Created by Administrator on 2017/8/31. */public class Main {    public static void main(String[] args) {        Scanner sc=new Scanner(System.in);        while(sc.hasNext()) {            int k=Integer.parseInt(sc.nextLine());            String s=sc.nextLine();            int k1=sc.nextInt();            System.out.println(k);            System.out.println(s);            System.out.println(k1);        }    }}

来看一下上面代码的执行结果:
这里写图片描述
当我输入第二轮次的5时程序抛错
这是因为当我首次进行第二轮次输入时sc.nextLine()读到的是第一轮次k1未读到的‘\n’,实际是‘’,而‘’是不能够转换为整数的包装类型的所以出错。
如果在代码末尾追加sc.r=nextline(), 把’\n’吃掉,程序运行正常。

原创粉丝点击