如何在Java中将扫描仪字符串转换为Stream? [英] How to make scanner strings into a Stream in Java?
本文介绍了如何在Java中将扫描仪字符串转换为Stream?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在 Java8
中,我如何形成
String
扫描仪读取结果?
In Java8
, how can I form a Stream
of String
out of the scanner read results?
InputStream is = A.class.getResourceAsStream("data.txt");
Scanner scanner = new Scanner(new BufferedInputStream(is), "UTF-8");
while (scanner.hasNextLine()) {
System.out.println(scanner.nextLine());
}
这是将扫描程序转换为我想要使用 forEach
。
That is turn a scanner into a stream which I would like to iterate using forEach
.
推荐答案
你这一切都错了,没有扫描仪
是必需的:
You are going about this all wrong, no Scanner
is required:
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()) {
}
如果你真的想要使用扫描仪
然后它实现Iterator
所以你可以这样做:
If you really want to use a Scanner
then it implements Iterator
so you can just do:
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);
}
P.S。你似乎也没有关闭资源。 始终关闭 InputStream
。
P.S. you also don't seem to be closing resources. always close an InputStream
.
这篇关于如何在Java中将扫描仪字符串转换为Stream?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文