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();
}

しかし、それをより多くのコレクションにしたい場合は、Guava provides List<String> CharStreams.readLines(Readable).

Iteratorsの存在を処理する良い方法が本当にないため、 an を提供していないと思いますIOException。ApacheLineIteratorは黙って an をキャッチしIOExceptionてイテレータを閉じているように見えますが、これは紛らわしく、リスクが高く、常に正しいとは限らないアプローチのようです。基本的に、ここでの「Guavaアプローチ」は、入力全体List<String>を一度に読み取るか、BufferedReaderスタイルループを自分で実行して、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 8には、簡単に消費できる行のストリームを返すBufferedReader新しいメソッドがあるため: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 に答える