Scanner类:
表示简单文本扫描器
1)创建Scanner类对象
Scanner的构造方法:
public Scanner(InputStream source)
InputStream is = System.in; //类似于抽象类多态
导包方式:import java.util.Scanner;
Scanner sc = new Scanenr(System.in);
System.in :标准"输入流"
public static final InputStream in静态字段:返回值InputStream:字节输入流(录入数据)
System.out :
public static final PrintStsram out:返回值PrintStream:字节打印流:调用println():实现行的分隔符
录入一个int类型的数据或者是录入String数据
Scanner类中常用的两个方法:
nextXXX() :录入下一个XXX数据类型的数据
public boolean hasNextXXX():判断录入的数据下一个是否是XXX这类型的数据
package org.westos.Demo5;
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数字");
if (sc.hasNextInt()) {
int a = sc.nextInt();
System.out.println(a);
} else {
System.out.println("你输入的不匹配");
}
}
}
录入int类型的和String类型的先后顺序的问题
发现一个问题:
先录入int类型数据,在录入String类型数据,String类型的数据直接略过了
原因:录入int类型数据之后,下个标记String:回车符号,它本身字符串录入了,直接略过了!
解决方案:
在录入String数据之前,在重新创建一个Scanner对象
package org.westos.Demo5;
//导包
import java.util.Scanner;
//测试类
public class ScannerDemo {
// 主方法
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);// 创建一个Scanner对象
// System.out.println("请输入两个数字"); 同时输入两个数字没有问题
// int a = sc.nextInt();
// int b = sc.nextInt();
// System.out.println("a="+a+",b="+b);
// System.out.println("请输入两个字符串"); 同时输入两个字符串没有问题
// String s1 = sc.nextLine();
// String s2 = sc.nextLine();
// System.out.println("s1="+s1+",s2="+s2);
//
//
// System.out.println("请输入一个字符串和一个数字"); 先输入字符串后输入数字也没有问题
// String a = sc.nextLine();
// int b = sc.nextInt();
// System.out.println("a="+a+",b="+b);
Scanner sc1 = new Scanner(System.in);// 先输入数字后输入字符串,字符串无法录入
System.out.println("请输入一个数字和一个字符串");
int a = sc.nextInt();
String b = sc.nextLine();
System.out.println("a=" + a + ",b=" + b);
}
}