面试官:小伙子,你说一下你对Scanner类的理解吧!

一.Scanner对象

之前我们学的基本语法中我们并没有实现程序和人的交互,但是Java给我们提供了这样一个工具类,我们可以获取用户的输入。java.util.Scanner是Java5的新特征,我们可以通Scanner类来获取用户的输入。

基本语法:

Scanner s=new Scanner(System.in);

通过Scanner类的next()与nextLine()方法获取字符串,在读取前我们一般需要使用hasNext()与hasNextLine()判断是否还有输入的数据。

package Demo01;

import java.util.Scanner;

public class D1 {
    public static void main(String[] args) {

        //创建一个扫描对象用于接收键盘数据
        Scanner scanner=new Scanner(System.in);

        System.out.println("使用next的方式接收:");
        //判断用户有没有输入字符串
        if (scanner.hasNext()){
            //使用next方法接收
           String st=scanner.next();//程序会等待用户输入完毕
           System.out.println("接收"+st);

        }
        //凡是IO流的类如果不关闭会一直占用资源,要养成好习惯用完就关掉
        scanner.close();

    }
}


拓展:

package Demo01;

import java.util.Scanner;

public class D2 {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);

        //从键盘接收数据
        System.out.println("使用next的方式接收:");

        //判断是否还有输入
        if (scanner.hasNextLine()){
            String string=scanner.nextLine();
            System.out.println("接收"+string);
        }
        scanner.close();//释放资源
    }
}

Scanner对象

对比以上两个代码得出:next();

  • 一定要读取到有效字符才可以结束。
  • 对输入有效字符之前遇到的空白,next()方法会自动将其去掉。
  • 只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
  • next()不能得到带有空格的字符串。

nextLine():

  • 一Enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符。
  • 可以或得空格。

Scanner进阶

一个例子:

package Demo01;

import java.util.Scanner;

public class D4 {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        //从键盘获取数据
        int i=0;
        float d=0.0f;
        System.out.println("请输入整数:");
        if (scanner.hasNextInt()){
            i=scanner.nextInt();
            System.out.println("输出:"+i);
        }else {
            System.out.println("不符合");
        }
        System.out.println("=================");
        System.out.println("请输入小数:");
        if (scanner.hasNextFloat()){
            d=scanner.nextFloat();
            System.out.println("输出:"+d);
        }else {
            System.out.println("不符合");
        }
        scanner.close();//释放内存

    }
}

自己写的例子:

package Demo01;

import java.util.Scanner;

public class D5 {
    public static void main(String[] args) {
        //项目要求:我们可以输入多个数字,并求其总和和平均数,每输入一个数字用回车来确定,通过输入非法数字来结束并输出执行结果
        int i = 0;
        double d = 0.00;
        int c = 0;
        int h = 0;
        System.out.println("请输入:");
        Scanner scanner = new Scanner(System.in);
        while (true) {


            if (scanner.hasNextInt()) {
                i += i + d;
                i = scanner.nextInt();
                System.out.println("输出:" + i);
                c++;
            } else if (scanner.hasNextFloat()) {
                d += d + i;
                d = scanner.nextDouble();
                System.out.println("输出:" + d);
                h++;

            }else {
                System.out.println("输出:"+(d+i));
                System.out.println((d+i) / (h + c));
                scanner.close();
            }
        }


    }
}

大神写的:

package Demo01;

import java.util.Scanner;

public class D6 {
    public static void main(String[] args) {
  //项目要求:我们可以输入多个数字,并求其总和和平均数,每输入一个数字用回车来确定,通过输入非法数字来结束并输出执行结果
        Scanner scanner=new Scanner(System.in);
        double unm=0.0;
        int i=0;
        double i1=0;
        System.out.println("请输入:");
        while (scanner.hasNextDouble()){
            unm=scanner.nextDouble();
           i1=i1+unm;
           i++;
            System.out.println("第"+i+"次输出。");
        }
        System.out.println("平均数:"+(i1/i)+"和:"+i1);
        scanner.close();
    }
}


最后

欢迎关注公众号:前程有光,领取一线大厂Java面试题总结+各知识点学习思维导+一份300页pdf文档的Java核心知识点总结! 这些资料的内容都是面试时面试官必问的知识点,篇章包括了很多知识点,其中包括了有基础知识、Java集合、JVM、多线程并发、spring原理、微服务、Netty 与RPC 、Kafka、日记、设计模式、Java算法、数据库、Zookeeper、分布式缓存、数据结构等等。

posted @ 2021-03-11 21:28  前程有光  阅读(163)  评论(0编辑  收藏  举报