【问题标题】:Can I make a copy of a scanner?我可以复印扫描仪吗?
【发布时间】:2023-04-11 12:02:01
【问题描述】:

我有一个将扫描仪作为参数的方法,我想复制它以便可以使用两次。这可能吗?

对不起,我是这个网站的新手。这是一个全java网站吗?因为这就是我正在使用的。

【问题讨论】:

  • 回答你的第二个问题,它绝不是一个全java的网站。但是要接触到了解 Java 的人,只需用“java”标记您的帖子,以及任何其他适用于您的问题的内容,了解 Java 的人会更容易找到它。

标签: java methods parameters


【解决方案1】:

只要我知道您是否想使用它两次,您必须初始化两个扫描仪或在第一次处理它时初始化同一个扫描仪。 所以这个问题的总体答案是当你第一次处理流时再次初始化扫描仪。

【讨论】:

    【解决方案2】:

    不清楚您所说的“...所以我可以使用它两次”是什么意思。

    愚蠢的解释是你想对Scanner 对象进行多次调用。显然,您不需要复制 Scanner 来执行此操作。

    下一个解释是你想使用Scanners 从同一个输入流中读取同一个令牌流两次。那是行不通的。扫描器假定它独占使用底层输入流......并且它消耗来自流的字符。因此,如果您有一个带有两个扫描仪的输入流,那么您的一个扫描仪将获得一些输入字符,而另一个将获得其余的。 (此外,很难预测哪个扫描仪会获取哪些字符。)

    不过,有几种方法可以解决这个问题。比如——

    • 如果数据源是一个文件(您的应用程序打开的),您可以打开它两次并为其创建两个独立的Scanners。

    • 您可以将整个流作为 String 或 StringBuffer 或字符数组读入内存,然后创建两个输入流来读取缓冲的数据,并为流创建独立的Scanners。

    • 您可以使用“tee 流”(例如:http://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/input/TeeInputStream.html)或类似方法将输入的副本保存到单独的输出流中,然后将写入后者的数据提供给单独的 Scanner。

    最终的解释是你想要两个从同一个流返回令牌的扫描器。如果你想这样做,你最好使用一个扫描仪,并将它传递到需要它的两个地方。 (如果您尝试在同一个输入流上使用两个扫描仪,您很可能会遇到上述问题。)

    【讨论】:

      猜你喜欢
      • 2019-10-22
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 2019-04-25
      • 2018-12-14
      • 1970-01-01
      • 2020-11-18
      相关资源
      最近更新 更多