我了解Scanner的优点,以及何时使用Scanner和BufferedReader。我读了一个不同的问题,但在一些类似的问题中,它的问题是Scannervs. BufferedReader
当我从输入中读取内容时,为什么Scanner这么慢? 我认为这与Scanner中有一个小的缓冲区有关,但是在这里我迷路了。最初的问题来自 Codechef,但我对该解决方案不感兴趣。
这是具有给定输入的代码示例:输入:
和代码
import java.io.BufferedReader; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String[] s = br.readLine().split(" "); int numberOfLines = Integer.parseInt(s[0]); int divideNumber = Integer.parseInt(s[1]); int count = 0; for (int i = 0; i < numberOfLines; i++) { String number = br.readLine(); if (number.length() < 11) { int num = Integer.parseInt(number); if (num % divideNumber == 0) { count++; } } } System.out.println(count); } }
如果我用扫描仪读取相同的代码,则速度很慢。
上层的类/方法通常比下层的类/方法慢。 您可能会以同样的方式询问为什么搜索regular expressions速度比使用 搜索慢String.indexOf()。实际上,我在SO上已经看到过这样的问题。
regular expressions
String.indexOf()
您的类/方法越专业,它可以执行的越好。 例如,它仅做一件简单的事情,但快速有效地做到了。 更通用的类/方法可以做10-20种不同的事情,因此它们 功能更强大,但因此速度较慢。
我在这里一般来说,我还没有Scanner和BufferedReader自己比较。
Scanner
BufferedReader