我在使用 Scanner(System.in)
时从标准中读取由空格或换行符分隔的一堆整数。
在 Java 中有没有更快的方法来做到这一点?
最佳答案
Is there any faster way of doing this in Java?
是的。扫描仪相当慢(至少根据我的经验)。
如果您不需要验证输入,我建议您只需将流包装在 BufferedInputStream 中并使用 String.split
/Integer.parseInt
之类的东西。
一个小比较:
使用此代码读取 17 兆字节(4233600 个数字)
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext())
sum += scanner.nextInt();
占用我的机器 3.3 秒。而这段代码
BufferedReader bi = new BufferedReader(new InputStreamReader(System.in));
String line;
while ((line = bi.readLine()) != null)
for (String numStr: line.split("\\s"))
sum += Integer.parseInt(numStr);
花了 0.7 秒。
通过进一步弄乱代码(使用 String.indexOf
/String.substring
迭代 line
),您可以将其降低到大约0.1 秒很容易,但我想我已经回答了你的问题,我不想把它变成一些代码高尔夫。
关于java - 从 Java 中读取 System.in 的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7049011/