导入Scanner类
- 导入格式:
import java.util.Scanner;
- 由导入格式中可看到有一个 util 包,这是 java 提供的实用工具包,util 包提供了许多实用的方法和数据结构(如日期(Data)类、日历(Calendar)类来产生和获取日期及时间,堆栈(Stack)、向量(Vector) 、位集合(Bitset)等类来表示相应的数据结构)
创建Scanner对象
-
创建格式:
Scanner sc = new Scanner(System.in);
-
通过 Scanner 类获取数据的多个方法
获取整数: int a = sc.nextInt();
获取小数: double b = sc.nextDouble();
获取布尔值: boolean bool = sc.nextBoolean();
获取字符串: String s = sc.nextLine();
String s = sc.next();
注意:没有 sc.nextChar(); 方法//代码演示 public class ScannerDemo1{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int a = sc.nextInt(); double b = sc.nextDouble(); boolean bool = sc.nextBoolean(); //获取上面三种数据类型的值,直接输入即可 } }
关于 sc.nextLine(); 和 sc.next(); 方法的区别:
nextLine() :会接收回车键,作为录入结束的标记
next() :不会接收回车键,但是会接收空格作为结束标记,只将空格前的内容进行录入public class ScannerDemo2{ public static voif main(String[] args){ //案例 1 Scanner sc = new Scanner(System.in); String s = sc.nextLine(); int a = sc.nextInt(); System.out.println(s); System.out.println(a); //此时录入 “iloveyou” 和 2 //得到的结果为:s="iloveyou",a=2 //案例 2 Scanner sc = new Scanner(System.in); int a = sc.nextInt(); String s = sc.nextLine(); System.out.println(a); System.out.println(s); //准备录入 2 和 “iloveyou” //此时,录入 2 ,再点击回车,表示完成a的录入,这时按理说应该开始录入s的数据 //但这时控制台显示直接将a输出了,只输出了一行,即a=2,并没有给出录入s的时间 //所以回顾刚才的输入情况,我们输入的是 2\n,此时a将2接收,但是\n还留在外面 //接下来应该开始录入s的数据,但是由于 \n 的存在,又因为 nextLine() 方法是接收 \n 的 //所以\n直接被 s 接收,此时就相当于完成了a和s的录入 //因此就出现上述的情况,直接输入 2\n 以后就直接打印 //案例 3 Scanner sc = new Scanner(System.in); int a = sc.nextInt(); String s = sc.next(); System.out.println(a); System.out.println(s); //此时录入 2 和 "iloveyou" //得到的结果为:a=2,s="iloveyou" //重新执行,录入 2 和 "iloveyou imissyou" //这里录入的s的数据中间有一个空格 //第二次录入得到的结果为:a=2,s="iloveyou" //因为字符串录入存在空格,由于内部正则的匹配,所以只会默认将空格前面的字符串赋给 s } }
-
注意:
- 若要同时录入多种类型的数据时,最好将 nextLine() 方法放在最前面进行录入,保证录入的完成(可以录入任何字符串)
- 若 nextLine() 方法不在最前面,也可以替换 next() 方法来录入字符串,但是字符串中不能包含空格