Java中next()和nextLine()以及nextInt()的区别
今天做一个学生信息录入系统的题目是遇到一个小问题,因此记录一下。
部分代码是这样的:
String name;
int age;
char sex;
Scanner sc=new Scanner(System.in);
System.out.println("请输入你的名字:");
name=sc.next();
System.out.println("请输入你的年龄:");
age=sc.nextInt();
System.out.println("请输入你的性别:");
sex=sc.nextLine().charAt(0);
运行时一输入性别就报错
一开始我还以为是sex=sc.nextLine().charAt(0);这句代码错了,核实后排除不是这一句错误
sex定义的char类型,nextLine读取的是输入的一整行,而char字符型只需要读取一个字符,因此需取输入的字符串的第一个字符,下标为0;
查询了nextLine相关用法后搞清楚了错误原因:
next()不会吸取字符前/后的空格/Tab键,只吸取字符,开始吸取字符(字符前后不算)直到遇到空格/Tab键/回车截止吸取;{包括nextInt()、nextDouble()、nextFloat()等}
nextLine()吸取字符前后的空格/Tab键,回车键截止。
而在这段代码sex=sc.nextLine().charAt(0);的前面刚好有age=sc.nextInt();
也就是在输入sex的值时默认赋值为我输入age值之后的回车,因此一直输入错误。
解决办法:既然我们知道nextLine()吸取字符前后的空格/Tab键,在每一个 next()、nextDouble() 、nextFloat()、nextInt() 等语句之后加一个nextLine()语句,将被nextInt()赋值后的回车键滤掉。
System.out.println("请输入你的年龄:");
age=sc.nextInt();
System.out.println("请输入你的性别:");
sc.nextLine();//过滤回车键
sex=sc.nextLine().charAt(0);
运行正常:
总结:
Java中Scanner类中的方法next()和nextLine()都是吸取输入台输入的字符,
nextLine()不能用在next()等相关方法的后面,否则会导致nextLine()吸收前面的回车键;
区别:
next()不会吸取字符前/后的空格/Tab键,只吸取字符,开始吸取字符(字符前后不算)直到遇到空格/Tab键/回车截止吸取;
nextLine()吸取字符前后的空格/Tab键,回车键截止;
注意:当使用nexInt()方法时,只能输入int类型的数据,同理nextDouble()、nextFloat()等。