java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入。
创建 Scanner 对象的基本语法如下:
Scanner scanner = new Scanner(System.in);
一、next() 与 nextLine() 接收字符串
我们可以通过 Scanner 类的 next()
与 nextLine()
方法获取输入的字符串 。
我们先使用 next()
方法,代码如下所示:
//next方式接收用户输入的字符串
String str = scanner.next();
System.out.println("输入的数据为:"+str);
//凡是属于IO流的类,如果不关闭会一直占用资源,因此一定要关掉
scanner.close();
此时我们输入 hello world
,最终结果如下所示:
我们可以看到,计算机只接收到了 hello 的部分,world则被忽略掉了,这是什么原因呢?
接下来我们看看 nextLine()
,代码如下:
//nextLine方式接收用户输入的字符串
String str2 = scanner.nextLine();
System.out.println("输入的内容为:"+str2);
scanner.close();
同样的,我们输入 hello world
,最终结果如下所示:
可以看到 world 字符串成功输出。
根据上面的例子,我们可以看出:
- 如果输入的有效字符后面带有空格,
next()
会将空格作为结束符。因此,如果输入的字符串中间部分有空格,则使用next方法是无法得到完整的字符串的。 - 而
nextLine()
则以Enter为结束符,也就是说 ,nextLine()
方法返回的是输入回车之前的所有字符。
此处我们再提一下,在接收字符串之前,我们一般需要使用 hasNext
与 hasNextLine
判断是否还有输入的数据,代码如下:
// hasNext判断是否还有输入
if (scan.hasNext()) {
String str1 = scan.next();
}
// hasNextLine判断是否还有输入
if (scan.hasNextLine()) {
String str2 = scan.nextLine();
}
二、nextInt () 与 nextFloat () 接收数字
如果要输入 int 或 float 类型的数据,在 Scanner 类中也有支持。在输入之前最好先使用 hasNextXxx()
方法进行验证,再使用 nextXxx()
来读取。
完整代码如下所示:
Scanner scanner = new Scanner(System.in);
int i = 0;
float f = 0.0f;
System.out.println("输入整数:");
//判断输入的是否是整数
if(scanner.hasNextInt()){
i = scanner.nextInt();
System.out.println("整数数据:"+i);
}else{
System.out.println("输入的不是整数");
}
System.out.println("=======================");
System.out.println("输入小数:");
//判断输入的是否是小数
if(scanner.hasNextFloat()){
f = scanner.nextFloat();
System.out.println("小数数据:"+f);
}else{
System.out.println("输入的不是小数");
}
scanner.close();
我们输入符合要求的数据,结果如下所示:
我们输入错误的数据,结果如下所示:
其他实例:
如下所示,输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入,并输出执行结果。
Scanner scanner = new Scanner(System.in);
double sum = 0;
int m =0;
while (scanner.hasNextDouble()) {
double x = scanner.nextDouble();
m = m + 1;
sum = sum + x;
}
System.out.println(m + "个数的和为" + sum);
System.out.println(m + "个数的平均值是" + (sum / m));
scanner.close();
结果如图所示: