不知道各位是不是,在我一开始接触Java的时候,看的两本书好像都是,在啥都没有学的时候,就已经看见了这个Scanner,所以这一篇博客就来说一下Scanner的使用:
我感觉在新手学习阶段中(就我现在的这阶段),Scanner是程序与人交互的最简单的一种方式,这是Java给我们提供的一个工具类,我们可以使用这个类做一些简单的输入,就是获取数据。Scanner是Java5的新特征,在java.util这个包下面,我们可以通过 Scanner 类来获取用户的输入。
其实说起来挺高大上的,什么用户交互啊,获取数据啊之类的,其实这一块是很简单的,基本上都是一些死代码。
下面是创建 Scanner 对象的基本语法:
1 Scanner s = new Scanner(System.in);
接下来我们演示一个最简单的数据输入,并通过 Scanner 类的 next() 与 nextLine() 方法获取输入的字符串,在读取前我们一般需要 使用hasNext()与hasNextLine() 判断是否还有输入的数据。
1、next&nextLine
我们可以使用next方式接收一下输入的数据:
1 public static void main(String[] args) { 2 //创建一个扫描器对象,用于接收键盘数据 3 Scanner scanner = new Scanner(System.in); 4 //next方式接收字符串 5 System.out.println("Next方式接收:"); 6 //判断用户还有没有输入字符 7 if (scanner.hasNext()){ 8 String str = scanner.next(); 9 System.out.println("输入内容:"+str); 10 } 11 //凡是属于IO流的类如果不关闭会一直占用资源.要养成好习惯用完就关掉.就好像你接水完了要关水龙头一样.很多下载软件或者视频软件如果你不彻底关,都会自己上传下载从而占用资源,你就会觉得卡,这一个道理. 14 scanner.close(); 15 } 16
测试数据:Hello World!
结果:Hello
实际测试代码后会发现,只输出了Hello,而没有输出后续的部分。
接下来我们使用另一个方法来接收数据:nextLine()
1 public static void main(String[] args) { 2 Scanner scan = new Scanner(System.in); 3 // 从键盘接收数据 4 // nextLine方式接收字符串 5 System.out.println("nextLine方式接收:"); 6 // 判断是否还有输入 7 if (scan.hasNextLine()) { 8 String str2 = scan.nextLine(); 9 System.out.println("输入内容:" + str2); 10 } 11 scan.close(); 12 }
测试数据:Hello World!
结果:Hello World!
经过测试会发现使用nextLine()方法的话,不仅仅输出了Hello,后续的也被一起输出了。
可以发现,这两个方法还是有很大区别的,所以我们大概总结一下两者的不同:
next():
1、一定要读取到有效字符后才可以结束输入。
2、对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
4、next() 不能得到带有空格的字符串。
nextLine():
1、以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。
2、可以获得空白
2、其他方法:
通过上面的代码,我们可以发现,scanner可以使用next()和nextLine()来接收代码,但是我们也可以发现,使用这两个方法接收的都是String字符串类型的对象,那么如果我们要是想要接收其他类型的数据怎么办呢?
这也好办,scanner中既然给我们提供了获取字符串的方法,那么也自然提供了获取其他数据类型的方法:
可以使用nextXxx()的方法来获取数据。
这里我们使用int和float类型来举例说:
1 public static void main(String[] args) { 2 Scanner scan = new Scanner(System.in); 3 // 从键盘接收数据 4 int i = 0; 5 float f = 0.0f; 6 System.out.print("输入整数:"); 7 if (scan.hasNextInt()) { 8 // 判断输入的是否是整数 9 i = scan.nextInt(); 10 // 接收整数 11 System.out.println("整数数据:" + i); 12 } else { 13 // 输入错误的信息 14 System.out.println("输入的不是整数!"); 15 } 16 System.out.print("输入小数:"); 17 if (scan.hasNextFloat()) { 18 // 判断输入的是否是小数 19 f = scan.nextFloat(); 20 // 接收小数 21 System.out.println("小数数据:" + f); 22 } else { 23 // 输入错误的信息 24 System.out.println("输入的不是小数!"); 25 } 26 scan.close(); 27 } 28
以下实例我们可以输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字 来结束输入并输出执行结果:
1 public static void main(String[] args) { 2 //扫描器接收键盘数据 3 Scanner scan = new Scanner(System.in); 4 double sum = 0; //和 5 int m = 0; //输入了多少个数字 6 //通过循环判断是否还有输入,并在里面对每一次进行求和和统计 7 while (scan.hasNextDouble()) { 8 double x = scan.nextDouble(); 9 m = m + 1; 10 sum = sum + x; 11 } 12 System.out.println(m + "个数的和为" + sum); 13 System.out.println(m + "个数的平均值是" + (sum / m)); 14 scan.close(); 15 }
到这里可能一些新伙伴才接触java,就不知道写的是什么意思了,这里我们使用了我们后面要学的流程控制语句,会在下一篇博客和大家继续聊一聊。