【问题标题】:Java - Inject String into ScannerJava - 将字符串注入扫描仪
【发布时间】:2014-03-31 21:48:25
【问题描述】:

我有一个使用私有Scanner 的方法,该方法通过new Scanner(System.in); 初始化

我在尝试向Scanner 实例提供输入的上下文中调用此方法,就好像我是命令行程序的用户一样。例如,如果我有以下功能:

public void getColor(){
    ...
    System.out.print("Enter a color: ");
    scanner.next();
    ...
}

在调用getColor() 之后,我想为scanner 提供一种颜色,它是Scanner 的一个实例。这在 Java 中可行吗?

编辑:请注意,我试图在测试环境中执行此操作。这可能是一个非常重要的细节!

【问题讨论】:

  • ScannerInputStream 作为参数。创建你自己的流,将你的颜色推送到它上面,你就完成了。
  • 您能描述一下您所说的“推送”InputStream 是什么意思吗?
  • 您可以尝试查看Robot 类,这就是这种情况下想到的全部内容。
  • 你可以在扫描器构建之前运行一些代码吗?如果是这样,您可以使用 System.setIn() 来提供备用标准输入。

标签: java io java.util.scanner


【解决方案1】:

使用 ByteArrayInputStream。通过在您感兴趣的 String 上调用 String.getBytes() 来获取构建它的字节。简单!

【讨论】:

  • 扫描仪究竟是如何拾取它的呢?它是一个私有变量。
【解决方案2】:

我使用的是 JUnit,发现我可以使用 System Rules' TextFromStandardInputStream 实用程序来为 Scanner 提供准确的输入数量和类型。

但是,对于无法访问 JUnit 的个人来说,System.setIn() 似乎也能完成工作。

【讨论】:

  • 嗯? junit 扩展将如何帮助他?此外,我非常怀疑这些 junit 扩展(仅通过调用 System.setIn() 工作)会改变以前初始化的扫描仪看到的内容。
  • @ErnestFriedman-Hill 我将再次努力要求您删除您的反对票。我已经修改了我的答案,以便它解释我是如何得到我的解决方案的,以及一个也应该适用于其他人的解决方案。如果有什么遗漏,请告诉我。
  • 当然。对不起,我没有意识到这是一个自我回答。如果您已经在测试环境中,您可能应该在问题中提到这一点。
  • 我很感激,我一定会在我的问题中添加这个细节
猜你喜欢
  • 2011-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-29
相关资源
最近更新 更多