天天看点

JAVASE 学习笔记 Java中的常用类--Scanner类1.Scanner类的引入

1.Scanner类的引入

Scanner类也是Java中常用类之一。Scanner(是用于接收键盘录入数据)是一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器。

1.1 Scanner类录入数据类型

  • Scanner(IntputStream source):构造一个新的Scanner,它生成的值从指定的输入流进行扫描的
import java.io.InputStream;
import java.util.Scanner;
public class Demo {
    public static void main(String[] args) {
        //Scanner键盘录入
        /*Scanner(IntputStream source):构造一个Scanner,
           它生成的值从指定的值从指定的输入流进行扫描
         */
        //static IntputStream in标准输入流,此流对应于键盘输入
        InputStream inputStream = System.in;
        Scanner sc = new Scanner(inputStream);
        //System类包含一些有用的类字段和方法,它不能被实例化

        //next ***:从键盘上录入某种数据
        //1.录入数值类型
        sc.nextInt();
        sc.nextLong();
        sc.nextDouble();
        //2.录入字符串类型
        sc.nextLine();
        sc.next();
    }
}
           

1.2 Scanner类判断数据类型

  • Scanner类中利用hasNext***方法判断录入的类型是否为某种类型

案例:利用键盘录入,判断录入的数据是否为整数类型

import java.util.Scanner;
public class Demo1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个整数:");
        if(sc.hasNextInt()){
            int i = sc.nextInt();
            System.out.println(i);
        }else{
            System.out.println("你输入的类型不正确");
        }
    }
}
           

1.3 Scanner类中next()与nexLine()比较

首先,在java程序输入中可能遇到这样一个问题:

当你录入一个整数时,再使用nextLine()录入一个字符串时,发现录完整数时,一点击回车,字符串好像没有录入现象。具体现象如下代码与图。

import java.util.Scanner;
public class Demo2 {
    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 s = sc.nextLine();
        System.out.println(s);
    }
}
           
JAVASE 学习笔记 Java中的常用类--Scanner类1.Scanner类的引入

但其实你敲入一个回车换行符,nextLine()方法就把这行回车换行符录入了。

解决方案:

  • 1.你再录入字符字符串时,重新创建一个Scanner对象,建议使用。
  • 2.可以使用next()方法录入字符串
import java.util.Scanner;
public class Demo3 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入一个整数:");
        int i = sc.nextInt();
        System.out.println(i);
        //你再录入字符字符串时,重新创建一个Scanner对象,。
        Scanner sc1 = new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String s = sc1.nextLine();
        System.out.println(s);

    }
}
           

案例:利用键盘进行输入。当用户输入整数时结束,当用户输入其他类型时,进行重新输入,直至输入正确为止。也可以将其抽成一个工具方法以便以后在使用时方便使用。

import java.util.Scanner;
public class Demo4 {
    public static void main(String[] args) {
       /* 案例:利用键盘进行输入。当用户输入整数时结束,
       当用户输入其他类型时,进行重新输入,直至输入正确为止。  */
        System.out.println("请输入一个整数:");
        while(true){
            Scanner scanner = new Scanner(System.in);
            if(scanner.hasNextInt()){
                int i = scanner.nextInt();
                System.out.println(i);
                break;
            }
            else{
                System.out.println("输入错误,重新输入");
            }
        }

    }
}

           
//将方法封装到工具类中
import java.util.Scanner;
public class ScannerUtils {
    //私有化空参构造,即不能创建对象
    private ScannerUtils(){}
    public static int getNumber(Scanner sc){
        int num=0;
        System.out.println("请输入一个整数:");
        while(true){
            Scanner scanner = new Scanner(System.in);
            if(scanner.hasNextInt()){
                int i= scanner.nextInt();
                num=i;
                return num;
            }
            else{
                System.out.println("输入错误,重新输入");
            }
        }

    }
}

//测试类
public class Demo6 {
    public static void main(String[] args) {
        int number = ScannerUtils.getNumber(new Scanner(System.in));
        System.out.println(number);
    }
}