nextLine和next函数的使用注意点
今天在写一段程序的时候,其中有一段是从键盘上输入数据,但是出现了其中有一个输入直接跳过的情况
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来接收多余的回车