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

简介: 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);

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

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

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);

看这次的输出结果:我们两次输入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);

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

当然有。自己动手写一个封装方法,通过把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()的区别
next() nextLine()
不能读入含空格字符串;以空格、Tab、回车作为输入的结束符号 可以读入空格,以回车作为结束符号
不会读取回车作为值 会读取回车作为它的值
Ok,以上就是对两者的区别做了说明,还有不懂的话建议多敲两遍我上面的代码,还有不懂可以留言,转载请注明出处,祝大家工作顺心,文章有什么不足欢迎留言批评!

相关文章
|
5月前
|
小程序 Java
28. 【Java教程】Scanner 类
28. 【Java教程】Scanner 类
120 7
|
6月前
|
存储 Java API
Scanner类、Random类、ArrayList类
Scanner类、Random类、ArrayList类
|
Java
JAVA_Scanner方法获得用户输入
JAVA_Scanner方法获得用户输入
67 0
|
Java
Scanner的基本用法
Scanner的基本用法
114 0
Scanner中nextLine()在nextInt()的几种解决方式
Scanner中nextLine()在nextInt()的几种解决方式
87 0
键盘输入Scanner类方法属性使用
键盘输入Scanner类方法属性使用
66 0
|
算法 Java
Java输入时 next()和nextLine()的区别
一定要读取到有效字符后才可以结束输入。
|
存储 安全 Java
Java开发——16.常用类(Scanner、Object、String、StringBuffer、StringBuilder)
Scanner:一个简单的文本扫描器,可以使用正则表达式解析原始类型和字符串。
Java开发——16.常用类(Scanner、Object、String、StringBuffer、StringBuilder)
next 与 nextLine 方法的区别
next 与 nextLine 方法的区别
342 0
next 与 nextLine 方法的区别
next() 与 nextLine() 区别
next() 与 nextLine() 区别
87 0