Scanner类
java.util.Scanner
JDK 1.5
public final class Scanner extends Object implements Iterator<String>
Scanner 类没有子类。
基本用法如下:
Scanner sc = new Scanner(System.in);
//System类下有一个静态变量in,InputStream 类型的
//public static final InputStream in;
//“标准”输入流。此流已打开并准备提供输入数据。通常,此流对应于键盘输入或者由主机环境或用户指定的另一个输入源。
//InputStream is = System.in;
解释:相当于Scanner包装了一个键盘录入的信息System.in,其好处是:
键盘录入的都是字符串,如果都用System.in来做,拿到的都是字符或者字节的数据,
但是Scanner有成员方法nextInt(),nextDouble()…,会自动把输入的数据转成其对应的字符串类型,或者int类型。
class Demo{
//int类型的静态常量
public static final int x =10;
//Student类型的静态常量
public static final Student s = new Student();
}
//int y = Dmeo.x;
//Student s = Demo.s;
Sacnner 类中的一个构造方法
public Scanner(InputStream source);
构造一个新的 Scanner,它生成的值是从指定的输入流扫描的。
Scanner 成员方法
基本格式:
hasNextXxx();判断是否还有下一个输入项,其中Xxx可以是int ,Double 等。如果需要判断是否包含下一个字符串,则可以省略Xxx.
nextXxx();获取下一个输入项,其中Xxx可以是int ,double等。
默认情况下,Scanner使用空格,回车等作为分隔符。
public boolean hasNextXxx();判断是否是某种类型的元素
public Xxx nextXxx();获取该元素
注意:
InputMismatchException:输入的和想要的不匹配
//创建对象
Scanner sc = new Scanner(system.in);
//获取数据
if(sc.hasNextInt()){
int x = sc.nextInt();
System.out.println("x:"+x);
}else{
System.out.println("您输入的数据有误");
}
常用方法
public int nextLine();获取一个int类型的值
public String nextLine(); 获取一个String类型的值
//先获取一个int值,在获取一个字符串
Int a = sc.nextInt();
String s = sc.nextLine();
System.out.println("a:"+a+",s:"+s);
出现的问题:先获取一个数值(int,double…)再获取一个字符串。
原因:数值输入后,回车(/r/n),这个会默认给字符串类型,而且不显示。
解决方法:
A;先获取一个数值后,再创建一个新的键盘录入对象获取字符串。(该方法相当于两个扫描器)。
B:把所有的数据都先按照字符串获取,然后要什么,就对应的转换成什么。(如何把一个字符串转成int或double类型等)。
int a = sc.nextInt();
Scanner sc2 = new Scanner(System.in);
String s = sc2.nextLine();
System.out.println("a:"+a+",s:"+s;