2012-05-30 3 views

답변

9

음이 그것을

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

처럼 직선 JDK와 함께 해 드리겠습니다 주어진, 당신은 특히에 대한 라이브러리를 필요 것이 아닙니다 ...로 시작하지만 당신은 더 컬렉션 수 있도록하려면 -y 구아바는 List<String> CharStreams.readLines(Readable)을 제공합니다.

실제로 IOException의 존재를 다루는 좋은 방법이 없기 때문에 Iterator을 제공하지 않습니다. 아파치의 LineIterator은 자동으로 IOException을 붙잡고 이터레이터를 종료하지만, 혼란스럽고 위험하고 항상 올바른 접근 방식은 아닌 것처럼 보입니다. 기본적으로, 나는 "구아바 접근법"은 전체 입력을 한번에 List<String> 전체를 읽거나 BufferedReader 스타일 루프를 스스로 결정하고 어떻게 결정할 것인가라고 생각합니다. 은 잠재적 인 존재를 다루고 자합니다. IOException s .

대부분의 Guava의 I/O 유틸리티는 파일 및 리소스와 같이 닫히거나 다시 열 수있는 스트림에 중점을두고 있지만 실제로는 System.in을 좋아하지 않습니다.

+1

당신이 정말로 원하는 경우 구아바없이이 작업을 수행하려면 Java의 ['StandardCharsets.UTF_8'] (http://docs.oracle.com/javase/7/docs/api/java/nio/charset/StandardCharsets.html#UTF_8)을 사용할 수 있습니다. 7. 그러나 하드 코딩 UTF-8은 어쨌든 최상의 아이디어가 아닐 것입니다 (주로 반대되는 것으로 잘 지정된 입력을 허용하지 않는 한) stdin에서 사용자 상호 작용에 영향을 미침). –

+4

오, 그래서 그들은 자바 7에서 그것을 추가했습니다. 충분히 오래 걸렸습니다. –

+0

예, 누군가 힌트를 받았습니다 .-) –

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

당신을 위해 구아바 필요하지 않습니다이

1

자바 (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 
    }) 
관련 문제