java.util.Scanner类是一个简单的文本扫描类,它能够解析基本数据类型和字符串。它本质上是使用正则表达式去读取不一样的数据类型。java
java.io.BufferedReader类为了可以高效的读取字符序列,从字符输入流和字符缓冲区读取文本。正则表达式
用Scanner和BufferedReader两种方式实现如下场景:
用命令行输入一个数字m,若是m >1 输出小于m的因此质数,包括m本身。缓存
Scanner 例子:命令行
package sjtejcys; import java.util.Scanner; public class Primes { public static void main(String[] args) { System.out.println("请输入一个数字:"); Scanner sc = new Scanner(System.in); int m = sc.nextInt(); if(m>1){ if(m ==2) System.out.println(m); else { int j = 0; System.out.println(2); for(int i = 3;i<=m;i++){ for(j =2;j<m;j++) if(i%j == 0) break; if(j==i) System.out.println(i); } } } sc.close(); } }
BufferedReader 例子:code
package sjtejcys; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class PrimesBF { public static void main(String[] args) { try { System.out.println("请输入一个数字:"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = null; while ((str = br.readLine()) != null) { int m = Integer.parseInt(str); if (m > 1) { if (m == 2) System.out.println(m); else { int j = 0; System.out.println(2); for (int i = 3; i <= m; i++) { for (j = 2; j < m; j++) if (i % j == 0) break; if (j == i) System.out.println(i); } } } } br.close(); } catch (IOException e) { e.printStackTrace(); } } }
简单来讲:
BufferedReader 是先把数据读到缓存区而后在写到硬盘里
Scanner是直接往硬盘些数据
BufferedReader 的效率比Scanner高字符串