Scanner对象
-
Java给我们提供了一个工具类,可以让我们获取用户的输入。java.util.Scanner 是 Java5 的新特性,我们可以通过Scanner类来获取用户的输入。
-
基本语法:Scanner s = new Scanner(system.in);
Scanner s = new Scanner(system.in);
-
通过 Scanner 类的 next() 与 nextLine() 方法获取输入的字符串,在读取前我们一般需要使用 hasNext() 与 hasNextLine() 判断是否还输入的数据。
-
next():
-
一定要读取到有效字符后才可以结束输入。
-
对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
-
只有输入有效字符后,才将其后面输入的空白作为分隔符或者结束符。
-
next() 不能得到带有空格的字符串。
代码示例:
package cheng.com.scanner; import java.util.Scanner; public class Demo01 { public static void main(String[] args) { // 创建一个扫描器对象,用于接收键盘数据 Scanner scanner = new Scanner(System.in); System.out.println("使用next方式接收:"); // 判断用户还有没有下一个字符(有没有输入字符串) if (scanner.hasNext()) {// 如果有,执行{}里面的操作 // 用一个字符串接收输入的内容(next方法) String str = scanner.next(); // 打印内容 System.out.println("用户输入的内容为:" + str); } // 凡是属于IO流的类,如果不关闭会一直占用资源,要养成用完关闭的好习惯 // IO流:输入流、输出流 scanner.close(); } }
运行效果:
使用next方式接收: hello 用户输入的内容为:hello
-
-
nextLine():
-
以Enter为结束符,也就是说 nextLine() 方法返回的是输入回车之前的所有字符。
-
可以获得空白。
代码示例:
package cheng.com.scanner; import java.util.Scanner; public class Demo02 { public static void main(String[] args) { // 创建一个扫描器对象,用于接收键盘数据 Scanner scanner = new Scanner(System.in); // 提示输入信息 System.out.println("使用nextLine方式接收:"); // 判断还有没有下一行的输入(有没有输入内容) if (scanner.hasNextLine()) { // 用一个字符串接收键盘输入信息 String str = scanner.nextLine(); // 打印接收到的信息 System.out.println("输入的内容为:" + str); } // 关闭Scanner scanner.close(); } }
注:可以不用写if判断,直接接收输入信息
package cheng.com.scanner; import java.util.Scanner; public class Demo02 { public static void main(String[] args) { // 创建一个扫描器对象,用于接收键盘数据 Scanner scanner = new Scanner(System.in); // 提示输入信息 System.out.println("使用nextLine方式接收:"); // 用一个字符串接收键盘输入信息 String str = scanner.nextLine(); // 打印接收到的信息 System.out.println("输入的内容为:" + str); // 关闭Scanner scanner.close(); } }
运行效果:
使用nextLine方式接收: hello world! 输入的内容为:hello world!
-
-
拓展
判断输入的是否是整数(int)和浮点数(float)
代码示例:
package cheng.com.scanner; import java.util.Scanner; // next拓展 public class Demo03 { public static void main(String[] args) { 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("请输入小数数据:"); // 判断输入的是否是一个小数 if (scanner.hasNextFloat()) { f = scanner.nextFloat(); System.out.println("输入的小数为:" + f); }else { System.out.println("输入的不是小数数据!"); } scanner.close(); } }
运行效果:
请输入整数数据: 10 输入的整数为:10 请输入小数数据: 20.0 输入的小数为:20.0
实操练习:
package cheng.com.scanner; import java.util.Scanner; public class Demo04 { public static void main(String[] args) { // 输入多个数字,并求其总和与平均数,每输入一个数字用回车确认 // 通过输入非数字来结束输入并输出结果 Scanner scanner = new Scanner(System.in); System.out.println("请输入数字:"); int num = 0;// 计算输入数字的个书 double sum = 0;// 计算和 // 通过循环判断是否还有输入,并在里面对每一次进行求和和统计 while (scanner.hasNextDouble()) { // 接收 double v = scanner.nextDouble(); sum += v;// 求和 sum = sum + v; num ++;// 统计个数 System.out.println("你输入了第" + num + "个数字" + v); } System.out.println(num + "个数的和为:" + sum); System.out.println(num + "个数的平均数为:" + sum / num); scanner.close(); } }
运行效果:
请输入数字: 1 你输入了第1个数字1.0 2 你输入了第2个数字2.0 3 你输入了第3个数字3.0 4 你输入了第4个数字4.0 a 4个数的和为:10.0 4个数的平均数为:2.5