next()
next()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键、Tab键或Enter键等结束符,next()方法会自动将其去掉,只有在输入有效字符之后,next()方法才将其后输入的空格键、Tab键或Enter键等视为分隔符或结束符。
nextLine()
nextLine()方法的结束符只是Enter键,即nextLine()方法返回的是Enter键之前的所有字符。
代码测试
String s1,s2;
Scanner sc = new Scanner(System.in);
/*1.*/ System.out.println("请输入第一个字符串:");
s1 = sc.next();
System.out.println("请输入第二个字符串:");
s2 = sc.nextLine();
System.out.println("输出的字符串为:"+s1+"\n"+s2);
/*2.*/ System.out.println("请输入第一个字符串:");
s1 = sc.nextLine();
System.out.println("请输入第二个字符串:");
s2 = sc.next();
System.out.println("输出的字符串为:"+s1+"\n"+s2);
运行第一种情况的结果为:
请输入第一个字符串:
as
请输入第二个字符串:
输出的字符串为:as
在这里输入as后按下回车键直接输出了结果,看起来并不能输入第二个字符串。
运行第二种情况的结果为:
请输入第一个字符串:
as
请输入第二个字符串:
as
输出的字符串为:as
as
在这里则可以正常的输入输出。
结论
next()没有读取到回车,而是将回车作为分隔符,并且留给了nextLine(),nextLine()直接读入回车符,结束。
故想要输出和第二种情况一样的结果,需要将第一种情况中nextLine()后再加一个nextLine(),第一个用来读next()留下的回车分隔符,第二个用来读取要输入的字符串。