问题引入

        刚学Java时经常使用到Scanner类,其接受键盘输入的字符串方法有两种: .next()和.nextLine(),讨论他们的区别。

        使用 .next() 和 .nextLine()先后接受两次键盘输入,然后打印输入的内容

import java.util.Scanner;
 
public class Test {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("第一次输入");
        String s1 = input.next();
        System.out.println("第二次输入");
        String s2 = input.nextLine();
        System.out.println("第一次输入内容:" + s1 + "\t第二次输入内容:" + s2);
    }
}

运行,输入 1 ,然后回车,发现还没进行第二次输入,系统就开始打印输入内容了

Java中.next()和.nextLine()_nextLine()

 如果调换一下顺序,先使用 .nextLine(),在使用 .next(),可以正常录入两次键盘输入

 Java中.next()和.nextLine()_next()_02

next() 和 nextLine()的区别

 

接收内容

next() 

1. 不接收空格,只接收有效字符,不能得到一个带空格的字符串 

2. next在没有读到有效字符前会把空格、Tab、Enter自动去掉 

nextLine()

1. 可以接受空格,能得到带空格的字符串  

2. 返回的是Enter之前的一切字符

 

停止接受

next() 

next()在读到有效字符后才会将空格、Tab、Enter视为结束符

nextLine()

nextLine()将Enter视为结束

 

注意:next()在遇到Enter结束时,并不会吸收Enter; 而nextLine()会吸收Enter。

何谓吸收?
  next()遇到Enter结束,此时键盘录入Enter 的信息仍然停留在内存中, 下次需要输入时,直接读取了该信息。因此本文开头的代码运行时,首先输入1然后回车之后,next()结束,键盘录入Enter的信息没有被吸收,然后被nextLine()吸收并作为结束符。才导致了最后的运行结果。

补充说明
  经过验证,除了nextLine()其他的next的方法,如nextDouble()  ,nextFloat() ,nextInt() 等,都无法吸收Enter。

如何解决?
  可以多使用一次nextLine(),用停留在内存中的Enter吸收掉。