Scanner.next()与Scanner.nextLine()的区别


1、next()方法在遇到有效字符前所遇到的空格、tab键、enter键都不能当作结束符,next()方法会自动将其去掉,只有当next()方法遇到有效字符之后,next()方法才将其后输入的空格键、Tab键或Enter键等视为分隔符或结束符,所以next()不能得到带有空格的字符串,只能得到部分字符串(空格前面的)。

2、nextLine()方法的结束符是Enter键,即nextLine()方法返回的是Enter键之前的所有字符串,所以nextLine()方法可以获取到带有空格的字符串。

package cn.laojiu.demo11;

import java.util.Scanner;
/*
 * 测试用例:
 * 输入wei chen
 * 测试next()接收到的字符串,字符串长度
 * 测试nextLine()接收到的字符串,字符串长度
 */
public class nextOfnextLine {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("输入:");
        String s = sc.next();
        System.out.println("next()方法接收到的字符:"+s+"\t字符长度:"+s.length());
        //如果第一次输入的字符串带有空格,next()接收到的是空格前面的,空格以及空格后面的由nextLine()接收了
        String c = sc.nextLine();    
        System.out.println("nextLine()方法接收到的字符:"+c+"\t字符长度:"+c.length());
    }
}

 

结果:

 
 

输入:
wei chen
next()方法接收到的字符:wei 字符长度:3        //next()方法遇到空格键相当于遇到了结束符。
nextLine()方法接收到的字符: chen 字符长度:5    //nextLine()方法将next()方法接收完剩下的都接收了

 

 

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的残兵败将了

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM