4

在 Apache Commons 中,我可以写:

LineIterator it = IOUtils.lineIterator(System.in, "utf-8");
while (it.hasNext()) {
    String line = it.nextLine();
    // do something with line
}

番石榴有类似的东西吗?

4

3 回答 3

9

好吧,首先......这不是你特别需要一个库的东西,因为它可以使用直接的 JDK 作为

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in,
  Charsets.UTF_8));
// okay, I guess Charsets.UTF_8 is Guava, but that lets us not worry about
// catching UnsupportedEncodingException
while (reader.ready()) {
  String line = reader.readLine();
}

但是如果你想要更多的收藏品-y Guava 提供List<String> CharStreams.readLines(Readable).

我认为我们不提供 an 是Iterator因为实际上没有任何好的方法来处理IOExceptions 的存在。ApacheLineIterator似乎默默地捕获IOException并关闭了迭代器,但是……这似乎是一种令人困惑、有风险且并不总是正确的方法。基本上,我认为这里的“Guava 方法”要么List<String>一次将整个输入读入 a ,要么自己执行BufferedReader-style 循环并决定如何处理s 的潜在存在IOException

一般来说,Guava 的大多数 I/O 实用程序都专注于可以关闭和重新打开的流,例如文件和资源,但不是真正的System.in.

于 2012-05-30T06:51:30.793 回答
9
Scanner sc = new Scanner(System.in,"UTF-8");
while(sc.hasNext()) {
  String next = sc.nextLine();
}

你不需要番石榴

于 2012-05-30T07:35:51.630 回答
2

由于 Java 8BufferedReader具有返回行流的新方法lines(),因此您可以轻松使用:

BufferedReader reader = new BufferedReader(
    new InputStreamReader(System.in, StandardCharsets.UTF_8));
reader.lines()
    .forEach(line -> { // or any other stream operation
      // process liness
    })
于 2016-05-13T08:52:18.143 回答