Java常用类(Scanner类)

常见对象(Scanner的概述和构造方法原理)

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

Scanner的构造方法原理:

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

代码示例:

package org.westos.demo2;
import com.sun.javaws.WinExtensionInstallHandler;
import java.io.InputStream;
import java.util.Scanner;

/**
 * @Author: Administrator
 * @CreateTime: 2019-04-20 13:42
 */
public class ScannerDemo {
    public static void main(String[] args) {
        InputStream is = System.in;
        //类 System
        //static InputStream in  “标准”输入流。
        //in
        //public static final InputStream in“标准”输入流。此流已打开并准备提供输入数据。通常,此流对应于键盘输入
        //Scanner(InputStream source) 构造一个新的 Scanner,它生成的值是从指定的输入流扫描的。
        Scanner scanner = new Scanner(is);
        System.out.println("请输入一个字符串");
        String s = scanner.nextLine();
        System.out.println("你输入的是:  "+s);
    }
}

常见对象(Scanner类的hasNextXxx()和nextXxx()方法的讲解)

hasNextXxx()用法:
hasNextXxx() 判断下一个是否是某种类型的元素, 其中Xxx可以是Int, Double等。
如果需要判断是否包含下一个字符串,则可以省略Xxx

nextXxx()用法:
nextXxx() 获取下一个输入项。Xxx的含义和上个方法中的Xxx相同

当从键盘录入数据时使用nextXxx()方法会存在一些问题:
代码示例:

package org.westos.demo2;

import java.util.Scanner;

/**
 * @Author: Administrator
 * @CreateTime: 2019-04-20 13:52
 */
public class ScannerDemo2 {
    public static void main(String[] args) {
        //当你使用Scanner先录入整数后用nextLine()录入字符串时,你会发现,我并没有输入字符串就结束了
        //其实他把你上次敲的回车换行符,已经录入了,但是这不是我想要的效果,怎么解决。
        //1.可以再录入字符串的时候,创建一个新对象  2.使用next()方法
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个整数");
        int num = sc.nextInt();
        System.out.println("你输入的数字是:"+num);
        sc=new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String s = sc.nextLine();
        //String s = sc.next();
        System.out.println("你输入的字符串是:"+s);
    }
}

通过这两种方法解决了问题,但是在使用next()方法时依然会出现下面的状况
代码示例:

package org.westos.demo2;

import java.util.Scanner;

/**
 * @Author: Administrator
 * @CreateTime: 2019-04-20 13:59
 */
public class ScannerDemo3 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串");
        //String s = sc.nextLine();
        String s=sc.next(); //录入的字符串中,遇到第一个空格后,空格后面的内容就不录入
        System.out.println(s);
    }
}

如果使用nextLine()方法,无论从键盘中录入的字符串中间有多少个空格,系统都会全部录入,但是如果使用next()方法,当我录入的一个很长的字符串中间存在许多空格时,在录入到第一个空格时候就会截止,第一个空格后面的内容就不回再录入了

常见对象(Scanner获取数据出现的小问题及解决方案)

两个常用的方法:
public int nextInt():获取一个int类型的值
public String nextLine():获取一个String类型的值
public String next():获取一个String类型的值

常见对象(Scanner更深层次的应用)

代码示例:

package org.westos.demo3;

import java.util.Scanner;

/**
 * @Author: Administrator
 * @CreateTime: 2019-04-20 14:21
 */
public class ScannerUtils {
    //私有化构造,在测试类中不能创建该类对象
    private ScannerUtils() {
    }

    public static int getInputNumber(Scanner sc) {

        int num = 0;
        while (true) {
            sc = new Scanner(System.in);
            boolean b = sc.hasNextInt(); //a
            if (b) {
                num = sc.nextInt();
                break;
            } else {
                System.out.println("你录入类型,不正确,请重新输入一个整数");
            }

        }
        return num;
    }
}

以上代码是自定义类,对构造方法私有化,私有化以后从外面不能创建该类的对象
以下是测试类代码:

package org.westos.demo3;

import java.util.Scanner;

/**
 * @Author: Administrator
 * @CreateTime: 2019-04-20 14:02
 */
public class MyTest {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个整数");
        int num = ScannerUtils.getInputNumber(sc);  //调用测试类中的getInputNumber(Scanner sc)方法

        System.out.println("录入的整数是" + num);

    }
}

通过上述方法,可以确保用户输入的是int型的整数,因为在程序编好后,是要交付给用户使用的,如果提示用户输入整数而用户不小心输成了其他类型,按照我们之前的做法,就会报错,所以为了提高程序的健壮性,可以通过上述的方法来提示用户直到用户输入正确为止。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值