java中next()和nextline()用法区别(详细说明)
一,方法说明
使用扫描器Scanner时,遇到了字符串一般会使用next()和nextLine()方法。Scanner类中的方法next()和nextLine()都是读入输入的字符,区别在于: next():不会读取字符前/后的空格/Tab键,只读取字符,当开始读取字符时,当遇到空格/Tab键/回车截止读取; nextLine():读取字符前后的空格/Tab键,有回车键时截止读取。
二,空格的情况(tab键相当于多个空个
1.测试代码
import java.util.Scanner; public class test1 { public static void main(String[] args) { System.out.println("第一次输入:"); Scanner sc=new Scanner(System.in); String s1=sc.next(); System.out.println(s1); System.out.println("第二次输入:"); String s2=sc.nextLine(); System.out.println(s2); } }
2.中间出现空格时
分析:中间出现空格时。 next()方法只读取了一个我爱你中国 nextline()方法读取了整个字符串,包括空格 中间出现空格测试情况:
3.开头出现空格时
分析:开头出现空格时。 next()方法只读取了一个我爱你中国,开头出现空格不影响,关心第一个连续字符串后面的空格。 nextline()方法读取了整个字符串,包括开头和中间的空格。 开头出现空格测试情况:
三,回车键的情况
next()方法开头出现回车不会结束运行,而nextline()当遇到是回车键时直接停止。
分析:回车键的情况
画得有点丑,/r’是回车键的位置。 next()方法开头遇到回车键一样可以读取后面字符串。 nextline()当遇到回车键时直接停止,看输出,nextline()方法应该输出了一个回车键。 回车键测试结果:
值得注意的是:
nextInt()、nextdoublie()、nextfloat()和next()方法的效果是一样的
四,常见问题:直接跳过了nextline()方法。并没有执行到。
测试代码
import java.util.Scanner; public class test1 { public static void main(String[] args) { System.out.println("第一次输入:"); Scanner sc=new Scanner(System.in); String s1=sc.next(); System.out.println("第二次输入:"); String s2=sc.nextLine(); System.out.println(s1); System.out.println(s2); } }
问题:只有第一次输入(绿色为输入的字),第二次输入直接被跳过了,还把第一次输入的后面连续的字符串当作了nextline()输入的了。 问题发生原因: Scanner是一个扫描器,当我们读取键盘数据时,先存到缓存区等待读取, next()方法读取到空白符就结束(输出不包括空格),也就是读取完“我爱你中国”结束,后半节字符串被当作nextline()方法的输入了(输出包括空格),后面还有个回车键,回车键“ ”留给了nextLine()让其结束。 nextLine()读取到回车“ ”结束。 解决办法:在使用nextline()方法之前加上一个nextline()方法就可以了,让第一个nextline()方法把不必要的字符串吃掉包括回车符也一起吃掉,这样就正常使用了。
测试修改后代码
import java.util.Scanner; public class test1 { public static void main(String[] args) { System.out.println("第一次输入:"); Scanner sc=new Scanner(System.in); String s1=sc.next(); //在使用nextline()方法之前加上一个nextline()方法 String s2=sc.nextLine(); System.out.println("第二次输入:"); String s3=sc.nextLine(); System.out.println(s1); System.out.println(s3); } }