Java学习——常用类的学习之Scanner
Scanner是一个常见的键盘录入的一个类。
1.Scanner的构造方法原理
Scanner有这么一个构造:
Scanner(InputStream source)
官方文档给出的解释是: 构造一个新的 Scanner,它生成的值是从指定的输入流扫描的。反正说了这么多它也就是用来做键盘录入的。
再来看,System类下有一个静态的字段:
public static final InputStream in;
这是一个标准的输入流,对应着键盘录入。
2.Scanner的使用
-
基本格式:
hasNextXxx()
判断下一个是否是某种类型的元素,其中Xxx可以是Int,Double等。
如果需要判断是否包含下一个字符串,则可以省略Xxx
nextXxx()
获取下一个输入项。Xxx的含义和上个方法中的Xxx相同
看起来可能有些生涩难懂,我们看一下下面的例子:
public class Test {
public static void main(String[] args) {
//创建一个Scanner对象
Scanner sc = new Scanner(System.in);
//用该对象调用hasNextInt()方法,判断下一个输入是不是Int类型,返回值为boolean类型
boolean b = sc.hasNextInt();
//键盘录入一个字符串类型的数据
String s = sc.nextLine();
//打印判断结果
System.out.println(b);
}
}
/*
输入:
张三
结果为:
false
*/
由此可见hasNextXxx()方法的作用是判断其下一个输入的数据的数据类型是不是该类型,该方法有返回值且返回值为boolean类型。
我们平常用到最多的还是nextXxx()方法,我们来看如下例子:
public class Test1 {
public static void main(String[] args) {
//创建一个Scanner对象
Scanner sc = new Scanner(System.in);
//提示:请输入一个整数类型的数字
System.out.println("请输入一个整数类型的数字:");
//键盘录入一个Int类型的数据
int s = sc.nextInt();
//打印输入的结果
System.out.println("你输入的数字是:"+s);
/*
输出:
请输入一个整数类型的数字:
123
你输入的数字是:123
*/
}
}
- 注意事项:
当我们先录入数字类型,再录入字符串类型时会出现一个问题,代码如下:
public class Test {
public static void main(String[] args) {
//创建一个Scanner对象
Scanner sc = new Scanner(System.in);
//提示:请输入一个整数类型的数字
System.out.println("请输入一个整数类型的数字:");
//键盘录入一个Int类型的数据
int s = sc.nextInt();
//提示输入一个字符串
System.out.println("请输入一个字符串:");
//键盘录入一个字符串
String str = sc.nextLine();
//打印输入的结果
System.out.println("你输入的数字是:"+s);
System.out.println("你输入的字符串是:"+str);
}
}
/*
输出结果:
请输入一个整数类型的数字:
123
请输入一个字符串:
你输入的数字是:123
你输入的字符串是:
*/
我们不难发现,当我们先输入数字类型时,按下Enter键,直接略过了输入字符串的步骤。那么是为什么呢?
其实并不是略过了输入字符串的步骤,其实是当你输入完数字时,按下Enter,这个Scanner对象将你按下的Enter键当成字符串给录入进去了。
那么,当我们想避免这个问题时,应该怎么做?其实我们可以再new一个Scanner对象,让它去单独录入字符串,就不会出现这种问题了,代码如下:
public class Test3 {
public static void main(String[] args) {
//创建一个Scanner对象
Scanner sc = new Scanner(System.in);
//提示:请输入一个整数类型的数字
System.out.println("请输入一个整数类型的数字:");
//键盘录入一个Int类型的数据
int s = sc.nextInt();
//重新创建一个新的Scanner对象
Scanner sc2 = new Scanner(System.in);
//提示输入一个字符串
System.out.println("请输入一个字符串:");
//键盘录入一个字符串
String str = sc2.nextLine();
//打印输入的结果
System.out.println("你输入的数字是:"+s);
System.out.println("你输入的字符串是:"+str);
}
}
/*
输出:
请输入一个整数类型的数字:
123
请输入一个字符串:
张三
你输入的数字是:123
你输入的字符串是:张三
*/
这样我们就避免了这个问题,当然还有一种方法,就是我们将所有数据都用字符串形式录入,录入完成之后,想要什么类型,就转换成什么数据类型,这种方法在这里我就不做过多的说明了。