java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java键盘录入Scanner类

Java键盘录入Scanner类的使用方法详析

作者:王哪跑nn

在Java编程中,引用数据类型是用来存储对象的引用(地址),而Scanner类是引用数据类型的一种,用于读取输入数据,文中通过代码介绍的非常详细,需要的朋友可以参考下

引言

我们要学的Scanner类是属于引用数据类型,我们先了解下引用数据类型。

引用数据类型的使用

与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固定的步骤或格式。

数据类型 变量名 = new 数据类型();

每种引用数据类型都有其功能,我们可以调用该类型实例的功能。

变量名.方法名();

1. Scanner类的介绍

Scanner类是一个用于扫描输入文本的新的实用程序。

Scanner类是引用数据类型的一种,我们可以使用该类来完成用户键盘录入,获取到录入的数据。

2. Scanner使用步骤:

导包:import java.util.Scanner;
创建对象实例:Scanner sc = new Scanner(System.in);
调用方法:
                int  i = sc.nextInt(); 用来接收控制台录入的数字
                String s = sc.next(); 用来接收控制台录入的字符串

 示例

package com.doit.day0217;

import java.util.Scanner;

/**
 * @日期: 2024/4/13
 * @Author: Wang NaPao
 * @Blog: https://blog.csdn.net/weixin_40968325?spm=1018.2226.3001.5343
 * @Tips: 和我一起学习吧
 * @Description:
 */

public class Test10 {
    public static void main(String[] args) {
        //创建Scanner引用类型的变量
        Scanner sc = new Scanner(System.in);
        //获取数字
        System.out.println("请输入一个数字");
        int n=sc.nextInt();
        System.out.println("n的值为"+n);
        //获取字符串
        System.out.println("请输入一个字符串");
        String str=sc.next();
        System.out.println("str的值为"+str);
    }
}

3. Scanner类的各种数据类型

使用nextByte()、nextDouble()、nextFloat()、nextInt()、nextLong()、nextShort();

上述方法包括next和nextLine执行时都会造成堵塞,等待用户在命令行输入数据回车确认。

使用这些方法可以读取对应的数据类型直到空格,并且只读对应的数据类型,输入其他类型的值会报InputMismatchException异常。

4. 关闭Scanner类

使用完Scanner后,我们一定要记得将它关闭!

因为使用Scanner本质上是打开了一个IO流,如果不关闭的话,它将会一直占用系统资源。

但是注意一旦你关闭后,就算在sc.close()这行代码后你再重新new Scanner(System.in),那也不能重新再打开一个扫描器了,如下图发现程序会报错

所以大家一定要在用不到扫描器之后再关闭,即把sc.close()代码放到最后。

package Day1108;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Scanner;

public class BidDecimal01 {
    public static void main(Stringargs) {
        Scanner sc=new Scanner(System.in);//读入
        System.out.println("请输入一个整数");
        BigInteger bi=sc.nextBigInteger();//读入一个Integer
        System.out.println("bi="+bi);

        sc.close();
        Scanner sc1=new Scanner(System.in);
        System.out.println("请输入一个整数");
        BigInteger bi1=sc.nextBigInteger();//读入一个Integer
        System.out.println("bi1="+bi1);
    }
}

 结果

5. next()和nextLine()的区别

从上面的讲解,我们会发现当我们想要输入的数据是String类型时,我们有两个方法可以调用,next()和nextLine().

那这两种方法具体有什么区别呢?

1)我们先来测试一下next():

package Day1108;

import java.util.Scanner;

public class BidDecimal01 {
    public static void main(Stringargs) {
        Scanner sc=new Scanner(System.in);//读入
        String s=sc.next();
        System.out.println(s);
    }
}

 结果:

从结果可以看出:

next()方法再识别输入的字符串时,不能得到我们输入的带有空格的字符串,只是读取到了Hello.

这说明next()在读取到有效字符之后会以空格作为自己的读取结束标识符,因为我们可以发现Hello前面的空格并没有影响到方法的读取。

所以next()用法总结如下:

2)我们再来测试一下nextLine() 

package Day1108;

import java.util.Scanner;

public class BidDecimal01 {
    public static void main(Stringargs) {
        Scanner sc=new Scanner(System.in);//读入
        String s=sc.nextLine();
        System.out.println(s);
    }
}

 结果

分析结果发现,输出结果与输入结果完全一致,nextLine()并没有被字符串中间的空格影响读取结果。

这是因为该方法以的是回车符(也就是我们键盘的enter键)作为结束标识符。

所以nextLine()用法总结:

6. hasNext和hasNextLine的区别

二者都是用于判断"有无键盘输入”的,有则返回true,没有则阻塞!

一定记住是阻塞而不是返回false,很多人都说是返回false,但你查源码会发现是不会返回false的,他会让你一直阻塞在判断阶段,二者只是在细节上有不同。

🧀实例1 

package Day1108;

import day1107.DemoTest07;

import java.util.Scanner;

public class BidDecimal01 {
    public static void main(Stringargs) {
        Scanner sc=new Scanner(System.in);
        System.out.println(sc.hasNext());
    }
}

 结果:(按了很多个换行也无法结束,处于阻塞阶段)

🧀实例2: 

package Day1108;

import day1107.DemoTest07;

import java.util.Scanner;

public class BidDecimal01 {
    public static void main(Stringargs) {
        Scanner sc=new Scanner(System.in);
        System.out.println(sc.hasNextLine());

    }
}

结果:

(直接按回车键也会为true)

总结:

因为hasNext、hasNextLine与next、nextLine有2x2种组合方式,所以我们用4段代码做4次实验就可以大体上了解它们的特性了。

1)hasNext和next组合

package Day1108;

import day1107.DemoTest07;

import java.util.Scanner;

public class BidDecimal01 {
    public static void main(Stringargs) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入字符串,并多混入空格回车尝试不同结果");
        if(sc.hasNext()){
            System.out.println("第一次"+sc.next());
            System.out.println("第二次"+sc.next());
            System.out.println("第三次"+sc.next());
        }
    }
}

 结果:

尝试输入:空格aaa空格bbb空格ccc回车

2)hasNext和nextLine组合 

package Day1108;

import day1107.DemoTest07;

import java.util.Scanner;

public class BidDecimal01 {
    public static void main(Stringargs) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入字符串,并多混入空格回车尝试不同结果");
        if(sc.hasNext()){
            System.out.println("第一次"+sc.nextLine());
            System.out.println("第二次"+sc.nextLine());
            System.out.println("第三次"+sc.nextLine());
        }
    }
}

结果:

光标仍然闪烁,证明堆空间中的aaa bbb ccc只赋值给了第一个,这也验证了nextLine可以录入空格。此时线控正在等待用户输入第二个nextLine.

3)hasNextLine和next组合 

package Day1108;

import day1107.DemoTest07;

import java.util.Scanner;

public class BidDecimal01 {
    public static void main(Stringargs) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入字符串,并多混入空格回车尝试不同结果");
        if(sc.hasNextLine()){
            System.out.println("第一次"+sc.next());
            System.out.println("第二次"+sc.next());
            System.out.println("第三次"+sc.next());
        }
    }
}

结果

4)hasNextLine和nextLine组合 

package Day1108;

import day1107.DemoTest07;

import java.util.Scanner;

public class BidDecimal01 {
    public static void main(Stringargs) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入字符串,并多混入空格回车尝试不同结果");
        if(sc.hasNextLine()){
            System.out.println("第一次"+sc.nextLine());
            System.out.println("第二次"+sc.nextLine());
            System.out.println("第三次"+sc.nextLine());
        }
    }
}

结果:

如果连续敲回车,那么hasNextLine也会判断为true,同时进入if语句执行。

总结 

到此这篇关于Java键盘录入Scanner类的使用方法的文章就介绍到这了,更多相关Java键盘录入Scanner类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文