Scanner类

本文介绍了Java中Scanner类的用途,包括构造方法原理、hasNextXxx()和nextXxx()方法的使用,以及在获取数据时可能出现的问题和解决方案,特别是针对整数后接字符串录入的处理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、Scanner的概述和构造方法原理

Scanner的概述:    
JDK5以后用于获取用户的键盘输入

Scanner的构造方法原理:
    Scanner(InputStream source)
    System类下有一个静态的字段:
        public static final InputStream in; 标准的输入流,对应着键盘录入

import java.io.InputStream;
import java.util.Scanner;

public class Mytest {
    public static void main(String[] args) {
        /*  Scanner(InputStream source)
        构造一个新的 Scanner,它生成的值是从指定的输入流扫描的。*/
        InputStream in =System.in;
        /*System 类
          静态的属性  in
        public static final InputStream in“标准”输入流。此流已打开并准备提供输入数据。
        通常,此流对应于键盘输入*/
        Scanner sc = new Scanner(in);

                //hasXXX()
               // nextXXXX()
        //录入数字的
        int i = scanner.nextInt();
        long l = scanner.nextLong();
        byte b = scanner.nextByte();
        boolean b1 = scanner.nextBoolean();
        double v = scanner.nextDouble();

        //录入字符串的
        String s = scanner.nextLine();
    }
}

2、Scanner类的hasNextXxx()和nextXxx()方法

基本格式
    hasNextxxx()  判断下一个是否是某种类型的元素,其中xxx可以是Int,Double等。
                  如果需要判断是否包含下一个字符串,则可以省略xxx
    nextxxx()  获取下一个输入项。xxx的含义和上个方法中的xxx相同
 

import java.util.Scanner;

public class MyTest {
    public static void main(String[] args) {
        //循环,直到输入正确类型
        while(true){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个整数");
        //hasNextInt()方法判断输入数据是否为该类型
        if(sc.hasNextInt()){
            int i = sc.nextInt();
            System.out.println(i);
        }else{
            System.out.println("输入类型错误,请重新输入");
        }
        }
    }
}

3、Scanner获取数据出现的小问题及解决

两个常用的方法:

public int nextInt():获取一个int类型的值 ​
public String nextLine():获取一个String类型的值 ​
public String next():获取一个String类型的值

问题当我们先录入整数,再录入字符串,发现字符串没有录入上。
原因当我们录入了整数后,敲了一下回车换行,那么这个回车换行,被当做字符串已经录入了

import java.util.Scanner;

public class MyTest1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个整数");
        int i = sc.nextInt();
        System.out.println(i);
        System.out.println("请输入一个字符串");
        String l = sc.nextLine();
        System.out.println(l);
        //当我们先录入整数,再录入字符串,发现字符串没有录入上。
        //原因:当我们录入了整数后,敲了一下回车换行,那么这个回车换行,被当做字符串已经录入了。
    }
}

 如何解决:
1.再录入字符串时,重新创建一个新的Scanner对象
2.换个录入字符串的方法 next();

import java.util.Scanner;

public class MyTest1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个整数");
        int i = sc.nextInt();
        System.out.println(i);

        //换个录入字符串的方法 next();
        System.out.println("请输入一个字符串");
        String n = sc.next();
        System.out.println(n);

        //再录入字符串时,重新创建一个新的Scanner对象
        System.out.println("请输入一个字符串");
        sc = new Scanner(System.in);
        String l = sc.nextLine();
        System.out.println(l);
    }
}

next()和nextLine()录入区别:

import java.util.Scanner;

public class MyTest2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String s = sc.nextLine();
        System.out.println(s);//会录入,回车换行,空格字符
        System.out.println("请输入一个字符串");
        String s1 = sc.next();//不录入 回车换行,空格字符
        System.out.println(s1);
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值