2012-05-30 3 views

ответ

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).

Я думаю, что мы не предоставляем Iterator, потому что на самом деле нет хорошего способа иметь дело с наличием IOException. Apache LineIterator, похоже, молча поймал IOException и закрыл итератор, но ... это похоже на запутанный, рискованный и не всегда правильный подход. В принципе, я думаю, что «подход Guava» здесь либо либо полностью прочитать весь ввод в List<String>, либо сделать цикл BufferedReader самостоятельно, и решить, как вы хотите иметь дело с потенциальным присутствием IOException s ,

Большинство утилит ввода-вывода Guava, в общем, ориентированы на потоки, которые можно закрыть и открыть, например файлы и ресурсы, но не очень понравятся System.in.

+1

Если вы действительно хотите для этого без Guava, вы можете использовать ['StandardCharsets.UTF_8'] (http://docs.oracle.com/javase/7/docs/api/java/nio/charset/StandardCharsets.html#UTF_8) из Java 7. Но жесткая кодировка UTF-8, вероятно, не самая лучшая идея в любом случае (если вы в первую очередь не принимаете четко заданный вход как противоположный для взаимодействия с пользователем на stdin). –

+4

О, так что они _did_ добавляют это в Java 7. Приняли их достаточно долго. –

+0

Да, кто-то взял несколько советов ;-) –

9
Scanner sc = new Scanner(System.in,"UTF-8"); 
while(sc.hasNext()) { 
    String next = sc.nextLine(); 
} 

Вам не нужно гуавы для этого

1

Поскольку 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 
    }) 
Смежные вопросы