我了解Scanner的用途,也知道何时使用Scanner和BufferedReader。我阅读了一个与之相关但有些不同的问题Scanner vs. BufferedReader
为什么使用Scanner从输入中读取数据会很慢? 我猜这可能与Scanner中有一个小缓冲区有关,但我并不确定。 原始问题来自于Codechef,但我对那个解决方案不感兴趣。
下面是一个带有给定输入的代码示例:
- 7 3
- 1
- 51
- 966369
- 7
- 9
- 999996
- 1
代码如下:
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);
}
}
如果我使用扫描器读取相同的代码,速度会很慢。
Scanner
基于正则表达式解析,BufferedReader
对char
执行简单检查。 - zaplBufferedReader
和Integer.parseInt()
。它仍然会在你将其转换为int
之前创建一个不必要的临时String
对象,这需要比直接从流中构建int
花费更多的时间。 - zapl