Scanner类
Java为我们提供了一个Scanner工具类,我们可以使用其获取用户的输入,java.util.Scanner
是Java5的新特性,我们可以通过Scanner类来获取用户的输入。
创建Scanner对象的基本语法为:
Scanner scanner = new Scanner(System.in);
我们可以通过Scanner类的next()
和nextLine()
方法来获取输入的字符串,在读取前我们一般需要使用hasNext()
和hasNextLine()
方法来判断是否还有输入的数据。
next()方法
//创建扫描器对象 用于接收键盘数据
Scanner scanner = new Scanner(System.in);
System.out.println("使用next方式接收:");
//判断是否还有输入
if (scanner.hasNext()) {
//获取输入字符串
String str = scanner.next();
System.out.println("输入的内容为:" + str);
}
//关闭Scanner输入流
scanner.close();
这里我们输入hello world!
,发现程序输出hello
,并不是我们输入的全部字符。
nextLine()方法
//创建扫描器对象 用于接收键盘数据
Scanner scanner = new Scanner(System.in);
System.out.println("使用nextLine方式接收:");
//判断是否还有输入
if (scanner.hasNextLine()) {
//获取输入数据
String str = scanner.nextLine();
System.out.println("输入的内容:" + str);
}
//关闭Scanner输入流
scanner.close();
这里我们也输入hello world!
,发现程序输出也是hello world!
。
next()和nextLine()的区别
next():
- 一定要读取到有效字符后才可以结束输入。
- 对输入有效字符之前遇到的空白,next()方法会自动将其去掉。
- 只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
- next()不能得到完整的带有空格的字符串。
nextLine():
- 以Enter键作为结束符,就是说nextLine()方法就是返回输入回车键之前的所有字符。
- nextLine()可以获取带有空格的字符串。
其实在Scanner类中,还有很多获取专门数据的方法,如下:
这些方法的套路一般都是使用nextXxx()来读取,但是在使用其之前最好先使用hasNextXxx()对其进行输入数据进行验证。
还是程序为例:
//创建扫描器对象 用于接收键盘数据
Scanner scanner = new Scanner(System.in);
System.out.println("请输入整数:");
//判断输入的数据
if (scanner.hasNextInt()) {
//获取输入的数据
int a = scanner.nextInt();
System.out.println("你输入的整数为:" + a);
} else {
System.out.println("你输入的不是整数!");
}
//关闭输入流
scanner.close();
当我们输入的数据为整数时,就会输出你输入的整数为:(输入的整数)
,否则输出你输入的不是整数!
,上面的程序就验证了上述的方法之一,其余方法同理。
在此,我们对于Scanner类必须要注意的是,我们在使用完Scanner类后,我们一定要将其关闭,因为它是属于IO(input输入和output输出)流的类,凡是属于IO流的类,如果我们使用完后不将其关闭,它就会一直占用资源,所以我们一定要养成用完就关闭的习惯。
下面展示一个Scanner类的例子:
package cn.ara.scanner;
import java.util.Scanner;
//通过获取键盘输入的数据,每输入一个数字用回车确认
//通过输入非数字来结束输入,最后计算其输入的平均值,并将平均值输出
public class Average {
public static void main(String[] args) {
//获取Scanner输入对象
Scanner scanner = new Scanner(System.in);
//输入数据总和
double sum = 0;
//记录输入数
int count = 0;
while (scanner.hasNextDouble()) {
//获取输入的数据
double input = scanner.nextDouble();
//将输入的数据求和
sum += input;
//记录输入数个数
count++;
}
System.out.println(count + "个数据的总和为:" + sum);
//计算平均值
double ave = sum / count;
System.out.println("这些数据的平均值为:" + ave);
//关闭输入流
scanner.close();
}
}