【问题标题】:Is StringTokenizer still recommended for USACO?是否仍向 USACO 推荐 StringTokenizer?
【发布时间】:2015-06-02 21:20:02
【问题描述】:

我刚刚开始使用 Java 解决一些 USACO 练习问题。但是,我立即遇到了一些关于解析文件输入的困惑......

USACO 培训页面说:

重要提示:BufferedReader 和 StringTokenizer 效率更高 比许多其他读取输入的方案。他们可以做一个巨大的 程序效率的差异!使用它们!

但是,Oracle 文档说:

StringTokenizer 是为了兼容性而保留的遗留类 原因尽管在新代码中不鼓励使用它。推荐 任何寻求此功能的人都使用 String 的 split 方法 或 java.util.regex 包。

我在互联网上发现了非常复杂的意见。包括培训页面在内的一些人说应该使用StringTokenizer,因为它比String.split() 快​​,后者比Scanner 快(尽管this 的答案不同意)。其他人则说应该使用ScannerString.split(),因为它们更易于使用,而且解析文件的性能成本可以忽略不计。

目前哪种方法最实用?

【问题讨论】:

  • This IDEOne 应该让您了解性能差异。 StringTokenizer 似乎要快得多,但速度并不是一切。没有人希望您为他们编写需要在一年内更新的代码,因为它不适用于新的 JDK 版本。
  • Scanner 有效、易于使用并且通常性能足以满足编程比赛的需要。

标签: java parsing


【解决方案1】:

在编程竞赛中,代码的逻辑和算法部分比用于获取输入数据的方法更重要。

ScannerStringTokenizer 之间只有几毫秒的差异,这不会对您的解决方案产生任何重大影响。

不过,总的来说,Scanner 更易于使用且性能始终如一,而(您所说)StringTokenizer 是一个遗留类,不鼓励使用。

【讨论】:

    猜你喜欢
    • 2011-10-22
    • 1970-01-01
    • 2020-03-13
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多