nextLine和next函数的使用注意点

发布时间 2023-04-11 12:14:58作者: 一往而深,

今天在写一段程序的时候,其中有一段是从键盘上输入数据,但是出现了其中有一个输入直接跳过的情况

import java.util.Scanner;

public class Test {
    public static void main(String[] args) throws Exception {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你的姓名:");
        final String name = sc.nextLine();
        System.out.println("请输入你的年龄:");
        final int age = sc.nextInt();
        System.out.println("请输入你的电话号码:");
        String number=sc.nextLine();

    }
}

可以发现当在输入电话号码时,还没有进行输入时,程序就已经截至了,说明它可能是跳过了该段输入了

对这几个输入函数进行分析

nextLine
nextLine();这个函数在你输入完一些东西之后按下回车则视为输入结束,输入的内容将被作为String返回。nextLine可以读入回车,但是回车不会成为返回字符(因为\n是转义字符),所以我们在返回的字符里面看不见\n

next

next();这个函数会扫描从有效字符起到空格,Tab,回车等结束字符之间的内容并作为String返回。不会读取回车

  • next和nextLine的区别
    再举个例子,输入" abc def gh\n",next();会返回abc,而nextLine();会返回 abc def gh\n,我们看到的是 abc def gh

nextInt

nextInt是读取一个整形数字,不能读取回车,遇到出车将停止读取

跳过现象原因分析

因为nextInt不能接收\n,而nextLine可以接收回车,当nextInt回车结束时;nextLine直接就接收nextInt的回车了,此时键盘还没有录入数据

结论

in.nextLine();不能放在in.nextInt()代码段后面;因为in.nextLine()会读入"\n"字符,但"\n"并不会成为返回的字符,而nextInt()是不会读入“\n”的;

解决方案

方案一

把代码中的nextLine();换成next();便可以解决“跳过”问题。
因为next并不会接收回车

方案二
可以在nextInt后面专门加一个nextLine来接收多余的回车

参考一

参考二