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

\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’吃掉,程序运行正常。

  • 25
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值