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()的区别的主要内容,如果未能解决你的问题,请参考以下文章

Java.util.Scanner next(Pattern) 方法的麻烦/困惑

Scanner.next().charAt具体含义

Scanner类

JAVASE2020.10学习总结

Java基础——Scanner扫描字符数组出现问题

Scanner