【发布时间】:2015-06-02 21:20:02
【问题描述】:
我刚刚开始使用 Java 解决一些 USACO 练习问题。但是,我立即遇到了一些关于解析文件输入的困惑......
USACO 培训页面说:
重要提示:BufferedReader 和 StringTokenizer 效率更高 比许多其他读取输入的方案。他们可以做一个巨大的 程序效率的差异!使用它们!
但是,Oracle 文档说:
StringTokenizer 是为了兼容性而保留的遗留类 原因尽管在新代码中不鼓励使用它。推荐 任何寻求此功能的人都使用 String 的 split 方法 或 java.util.regex 包。
我在互联网上发现了非常复杂的意见。包括培训页面在内的一些人说应该使用StringTokenizer,因为它比String.split() 快,后者比Scanner 快(尽管this 的答案不同意)。其他人则说应该使用Scanner 或String.split(),因为它们更易于使用,而且解析文件的性能成本可以忽略不计。
目前哪种方法最实用?
【问题讨论】:
-
This IDEOne 应该让您了解性能差异。
StringTokenizer似乎要快得多,但速度并不是一切。没有人希望您为他们编写需要在一年内更新的代码,因为它不适用于新的 JDK 版本。 -
Scanner有效、易于使用并且通常性能足以满足编程比赛的需要。