Scanner.next()与Scanner.nextLine()的区别
Posted chenwei-blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scanner.next()与Scanner.nextLine()的区别相关的知识,希望对你有一定的参考价值。
1、next()方法在遇到有效字符前所遇到的空格、tab键、enter键都不能当作结束符,next()方法会自动将其去掉,只有当next()方法遇到有效字符之后,next()方法才将其后输入的空格键、Tab键或Enter键等视为分隔符或结束符,所以next()不能得到带有空格的字符串,只能得到部分字符串(空格前面的)。
2、nextLine()方法的结束符是Enter键,即nextLine()方法返回的是Enter键之前的所有字符串,所以nextLine()方法可以获取到带有空格的字符串。
1 package cn.chengdu.zizengjian; 2 3 import java.util.Scanner; 4 5 public class syso { 6 7 public static void main(String[] args) { 8 String A = scanner().next(); 9 System.out.println("next()方法接收:"+A); 10 String B = scanner().nextLine(); 11 System.out.println("nextLine()方法接收:"+B); 12 13 } 14 public static Scanner scanner() { 15 System.out.println("请输入字符:"); 16 Scanner input = new Scanner(System.in); 17 return input; 18 } 19 }
结果:
请输入字符: 1 1 next()方法接收:1 请输入字符: 1 1 1 nextLine()方法接收: 1 1 1
nextInt()、nextDouble()方法与next()方法相同,一定要读取到有效字符以后才可以结束输入。
package cn.chengdu.zizengjian; import java.util.Scanner; public class Demo4 { public static void main(String[] args) { int num = scanner().nextInt(); System.out.println("nextInt方法:"+num); double dnum = scanner().nextDouble(); System.out.println("nextDouble方法:"+dnum); } public static Scanner scanner() { System.out.println("请输入字符"); Scanner input = new Scanner(System.in); return input; } }
结果:
请输入字符 1 1 nextInt方法:1 请输入字符 1 1 nextDouble方法:1.0
3、当使用next()之后接着使用nextLine(),中间需要使用nextLine()用来接收next()或者nextInt()等过滤的回车、tab、空格。这样才能让下面的nextLine()生效,否则它就接收了enter、tab、空格等,导致用户没有输入就结束了。
1 package cn.chengdu.zizengjian; 2 3 import java.util.Scanner; 4 5 6 /* 7 * 错误示例: 8 * 当next()下面接着使用nextLine()时,中间没有使用nextLine()接收next()接收完后的余下字符,会导致用户没有进行余下的输入直接结束程序 9 */ 10 11 12 public class Demo6 { 13 public static void main(String[] args) { 14 System.out.println("请输入字符串A"); 15 Scanner input = new Scanner(System.in); 16 String A = input.next(); //当next()遇到有效字符后再遇到空格、tab键、enter键就结束了接收 17 System.out.println("A接收到的输入:"+A); 18 System.out.println("请输入字符串C"); 19 String C = input.nextLine(); //nextLine()由于没有遇到enter键,继续接收余下的字符,当遇到2后面的enter键时才结束接收 20 System.out.println("C接收到的输入:"+C); 21 } 22 23 }
结果:
请输入字符串A 1 2 A接收到的输入:1 请输入字符串C C接收到的输入: 2
正确示例:
1 package cn.chengdu.zizengjian; 2 3 import java.util.Scanner; 4 5 /* 6 * 正确示例: 7 * 在next()方法与nextLine()方法之间再调用一次nextLine()方法接收next()方法接受完后剩下来的残兵败将! 8 */ 9 10 public class Demo7 { 11 12 public static void main(String[] args) { 13 Scanner input = new Scanner(System.in); 14 System.out.println("请输入A:"); 15 String A = input.next(); 16 System.out.println("A接收到的输入:"+A); 17 input.nextLine(); //接收A的残兵败将。 18 System.out.println("请输入B:"); 19 String B = input.nextLine(); 20 System.out.println("B接收到的输入:"+B); 21 22 } 23 24 }
结果:
请输入A: 12 23 23 A接收到的输入:12 请输入B: 此处已经没有接收到A的残兵败将了 B接收到的输入:此处已经没有接收到A的残兵败将了
以上是关于Scanner.next()与Scanner.nextLine()的区别的主要内容,如果未能解决你的问题,请参考以下文章