当前位置: 代码迷 >> 综合 >> Scanner中 next() 和 nextLine() 的区别
  详细解决方案

Scanner中 next() 和 nextLine() 的区别

热度:97   发布时间:2023-11-26 17:43:08.0
  • 对于Scanner中 next() 和 nextLine()方法,有一个比较基础且受众很广的解释:

next()方法在读取内容时,会过滤掉有效字符前面的无效字符,对输入有效字符之前遇到的空格键、Tab键或Enter键等结符,next()方法会自动将其过滤掉;只有在读取到有效字符之后,next()方法才将其后的空格键、Tab键或Enter键等视为结束符;所以next()方法不能得到带空格的字符串。

nextLine()方法字面上有扫描一整行的意思,它的结束符只能是Enter键,即nextLine()方法返回的是Enter键之前没有被读取的所有字符,它是可以得到带空格的字符串的。

  • 但是这种简单的区别不足以解释我所遇到的问题:
import java.util.Scanner;
public class Demo1 {public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.println("系统开始运行:");String name1 = input.next();System.out.println("next方法已运行");String name2 = input.nextLine();System.out.println("nextLine方法已运行");System.out.println(name1);System.out.println(name2+"nextLine方法");}
}

运行结果:

红线为光标所停留位置,可以看到 nextLine() 方法的运行直接被跳过了,没有获取到值

  • 此时,调换一下 next() 和 nextLine()顺序:
import java.util.Scanner;
public class Demo1 {public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.println("系统开始运行:");String name2 = input.nextLine();System.out.println("nextLine方法已运行");String name1 = input.next();System.out.println("next方法已运行");System.out.println(name1);System.out.println(name2+"nextLine方法");}
}

运行结果:

可以看到 nextLine() 放在 next() 之前就可以正常运行,同时 next() 方法并没有受到 nextLine() 的影响,为什么?

  • 原因:

next() 扫描结束标记是:空格,tab键,回车符

           不会过滤回车符

nextLine() 从左往右扫描数据,扫描结束标记是:回车符

           过滤回车符

Scanner是一个扫描器,我们录入到控制台的数据,先存到缓存区等待读取,当 next() 在 nextLine() 之前时,没有过滤掉的回车符被 nextLine() 读取后直接运行了,读取结果是空行,返回空数据。。。。。。

  相关解决方案