当前位置: 首页 > 知识库问答 >
问题:

如何在Java中使扫描器字符串成为一个流?[副本]

关翰
2023-03-14
InputStream is = A.class.getResourceAsStream("data.txt");
Scanner scanner = new Scanner(new BufferedInputStream(is), "UTF-8");
while (scanner.hasNextLine()) {
    System.out.println(scanner.nextLine());
}

共有1个答案

唐煜
2023-03-14

您这样做完全是错误的,不需要扫描器:

try (final InputStream is = A.class.getResourceAsStream("data.txt");
        final Reader r = new InputStreamReader(is, StandardCharsets.UTF_8);
        final BufferedReader br = new BufferedReader(r);
        final Stream<String> lines = br.lines()) {

}

如果您真的想要使用扫描器,那么它将实现迭代器,这样您就可以执行以下操作:

public Stream<String> streamScanner(final Scanner scanner) {
    final Spliterator<String> splt = Spliterators.spliterator(scanner, Long.MAX_VALUE, Spliterator.ORDERED | Spliterator.NONNULL);
    return StreamSupport.stream(splt, false)
            .onClose(scanner::close);
}

附注。您似乎也没有关闭资源。始终关闭InputStream

 类似资料:
  • 问题内容: 在,我该怎么形成的从扫描仪读取结果? 那就是将扫描仪变成我想使用迭代的流。 问题答案: 您正在处理所有错误,不需要: 如果您确实要使用a ,那么您可以这样做: PS,您似乎也没有关闭资源。 总是 关闭一个。

  • 问题内容: 我正在编写一个使用Event类的程序,该类中有一个日历实例和一个String类型的描述。创建事件的方法使用扫描仪获取月,日,年,小时,分钟和说明。我遇到的问题是Scanner.next()方法仅返回空格之前的第一个单词。因此,如果输入为“我的生日”,则该事件实例的描述就是“我的”。 我做了一些研究,发现人们使用Scanner.nextLine()解决此问题,但是当我尝试这样做时,它只是

  • 同一类型的扫描仪方法在一个地方工作,但在另一个地方不工作。。。如果这改变了任何答案,我将使用eclipse作为我的代码编辑器。如果不是在这里,所有变量都已在别处声明。 如果有人知道如何解决这个问题,我将永远感激你:) 这一个正在工作: 这个不起作用: 错误消息:

  • 我正在尝试使用Java中的Scanner类扫描一个文件,其中的数据字段由“@”或“endline”分隔。以下是一个示例输入文件: 为了正确扫描如下所示的输入文件,我尝试将Java扫描程序上的分隔符更改为正则表达式,它应该匹配或任何垂直空白,包括和 下面是我用来测试它的代码: 我希望扫描的令牌是: 但实际收到的代币是: 我本来希望扫描器在扫描时,在搜索之后,以及在下一次调用,跳过该换行符,但由于某种

  • 我想从多个单词打印第一个字符,这个单词来自api,像DisplayName:arwa othman。我想打印(a)和(o)这封信。有人能帮我吗??

  • 我对编程相当陌生,正在尝试设计一种方法来创建具有多个参数的方法。扫描仪,单词字符串数组,与单词数组匹配的字符串数组,以及字符串数组中有多少单词的整数。我的目标是一个接一个地处理扫描仪中的单词,如果扫描仪中的一个单词也在单词数组中,我想在int数组中添加一个,如果一个单词不是单词数组,我想在数组的第一个空格处将其添加到单词数组中,并在与单词相同的位置将其添加到int数组中。该方法的目标是在处理扫描仪