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

一、Scanner类的概念

Scanner是一个扫描获取用户输入的一个类,查看类的源码,可以看出基本数据类型除了char都可以进行输入。但是呢,用于接收用户输入字符串的方式有next()和nextLine()两种。

二、next()和nextLine两个的区别

在了解区别之前,我们先看一段代码,示例如下:

          /*
            在main方法中执行
          */
          Scanner scanner = new Scanner(System.in);
    	  System.out.println("请输入姓名:");
    	  String name = scanner.nextLine();
    	  System.out.println("请输入年龄:");
    	  int age = scanner.nextInt();
    	  System.out.println("请输入班级:");
    	  String Class = scanner.nextLine();
    	  System.out.println("您的个人信息如下:(请确认自己信息)");
    	  System.out.println("姓名:"+name);
    	  System.out.println("年龄:"+age);
    	  System.out.println("身份ID:"+Class);

Scanner类中next()和nextLine()的区别_第1张图片

 从上可以看出,在输入年龄之后,我们还没来的及输入班级,本次用户输入就已经自动结束。

带着这个问题,我们一探究竟

2.1:探究next()和nextLine()的区别

    	  /*
            在main方法中执行
          */
    	  Scanner scanner = new Scanner(System.in);
    	  System.out.println("请输入文字:");
    	  String str1 = scanner.nextLine();
    	  System.out.println("请再次输入文字:");
    	  String str2 = scanner.next();
    	  System.out.println("nextLine方式输出的字符串:"+str1);
    	  System.out.println("next方式输出的字符串:"+str2);

Scanner类中next()和nextLine()的区别_第2张图片

 看这次的输出结果:我们两次输入hello word,明显nextLine输出的结果可以含有空格,也就是说nextLine是以回车键作为输入的结束符号;

而next输出的则没有空格,就可以理解为next输入的字符串不能含有空格,并且,它是以空格、Tab、回车作为输入的结束符号,三者谁在前就先以谁为结束符号。

问:现在我们回到头部看第一段代码,我们就能发现,为什么还没等用户输入班级,就直接结束掉输入了呢?

答:因为nextLine他读取到我们在输入年龄之后的回车键来作为它的值。

出现这种问题,我们要如何解决呢?

两种解决方法:

第一种方法:

既然next来读取上一次回车作为它的值,那我们就在代码中优先读取一下回车,代码展示

    	  /*
            在main方法中运行
          */
          Scanner scanner = new Scanner(System.in);
    	  System.out.println("请输入姓名:");
    	  String name = scanner.nextLine();
    	  System.out.println("请输入年龄:");
    	  int age = scanner.nextInt();
    	  //在这里我们优先让他接收我们输入年龄之后的回车
    	  scanner.nextLine();
    	  System.out.println("请输入班级:");
    	  String Class = scanner.nextLine();
    	  
    	  System.out.println("您的个人信息如下:(请确认自己信息)");
    	  System.out.println("姓名:"+name);
    	  System.out.println("年龄:"+age);
    	  System.out.println("班级:"+Class);

Scanner类中next()和nextLine()的区别_第3张图片

 完美解决!但是,这样虽然问题解决了,每次都要多谢一行代码,我们作为程序员就会很反感,有什么方法能让我不写这一行代码来解决呢?

当然有。自己动手写一个封装方法,通过把nextLine接收用户输入的的字符串,我们当作一个方法封装起来不就好了嘛。你们不想动手我来,直接拿走就行。代码如下:

package ymy.circulation.test;

import java.util.Scanner;
/**
 * 通过输入nextLine字符串当作一个方法进行封装起来,然后调用这个方法
 */
public class ScannerDemo {
	
	private static Scanner extracted() {
		return new Scanner(System.in);
	}
	
	public static int getInt() {
		Scanner scanner = extracted();
		return scanner.nextInt();
	}
	
	public static String getString() {
		return extracted().nextLine();
	}
}

然后我们来测试类测试一下看看可行与否:

package ymy.circulation.test;

public class Text {
    public static void main(String[] agrs) {
    	
        System.out.println("请输入姓名:");
        String name = ScannerDemo.getString();//直接调用我们的封装方法
        System.out.println("请输入年龄:");
        int Class = ScannerDemo.getInt();
        
        
        //scanner.nextLine();//读取回车注释掉了哦

        System.out.println("请输入班级:");
        String Shenfen = ScannerDemo.getString();
        System.out.println("您的个人信息如下:(请确认自己信息)");
        System.out.println("姓名:"+name);
        System.out.println("年龄:"+Class);
        System.out.println("班级:"+Shenfen);
    }
}

看结果

Scanner类中next()和nextLine()的区别_第4张图片

 看来我们这个办法也是完美解决,可以看出读取回车作为自己的结果问题已经解决,亲测可行!

 陪大家一起复盘他们两个的区别:

扫描类Scanner中next()和nextLine()的区别
next() nextLine()
不能读入含空格字符串;以空格、Tab、回车作为输入的结束符号 可以读入空格,以回车作为结束符号
不会读取回车作为值 会读取回车作为它的值

Ok,以上就是对两者的区别做了说明,还有不懂的话建议多敲两遍我上面的代码,还有不懂可以留言,转载请注明出处,祝大家工作顺心,文章有什么不足欢迎留言批评!
 

你可能感兴趣的:(随手云笔记,java)