Java에서 readLine ()을 사용하여 예상 한 결과를 얻지 못하고 있습니다.

StackOverflow https://stackoverflow.com/questions/25033

  •  09-06-2019
  •  | 
  •  

문제

아래 코드 스 니펫을 사용하고 있지만 제대로 작동하지 않습니다. 라코 디스

readLine()에 대한 Javadoc을 읽음으로써 다음과 같이 말합니다.

텍스트 한 줄을 읽습니다. 줄은 줄 바꿈 (\n), 캐리지 리턴 (\r) 또는 캐리지 리턴 바로 뒤에 줄 바꿈 중 하나로 종료 된 것으로 간주됩니다.

반품 : 줄 끝 문자를 포함하지 않고 줄 내용을 포함하는 유전자 태그 코드 또는 스트림 끝에 도달 한 경우 null

투구 : String-I / O 오류가 발생한 경우

내가 이해 한 바에 따르면 IOExceptionreadLine와 같은 줄 종료 이외의 입력이 처음 입력 될 때 null을 반환해야합니다. 그러나이 코드는 무한 반복됩니다. 디버깅 후 종료 문자 만 입력하면 null이 반환되는 대신 실제로 빈 문자열 ( "")이 반환된다는 것을 발견했습니다. 이것은 나에게 의미가 없습니다. 내가 올바르게 이해하지 못하는 것은 무엇입니까?

도움이 되었습니까?

해결책

<인용구>

내가 이해 한 바에 따르면 readLine은 '\ r'과 같은 줄 종료 이외의 입력이 처음 입력 될 때 null을 반환해야합니다.

정답이 아닙니다.readLine는 스트림 끝에 도달하면 null를 반환합니다.예를 들어 파일을 읽고 있는데 파일이 끝나거나 소켓에서 읽고 소켓이 닫히는 경우입니다.

하지만 단순히 콘솔 입력을 읽는 경우 키보드에서 리턴 키를 눌러도 스트림이 종료되지 않습니다.반환되는 문자 일뿐입니다 (OS에 따라 \n 또는 \r\n).

따라서 빈 문자열과 줄 끝을 모두 나누려면 다음을 수행해야합니다. 라코 디스

또한 다음과 같이 파일을 직접 파이프하면 현재 프로그램이 예상대로 작동합니다. 라코 디스

다른 팁

입력이 스트림의 끝과 같지 않습니다.일반적으로 Ctrl + D 를 눌러 콘솔에서 스트림 끝을 시뮬레이션 할 수 있습니다 (일부 시스템에서는 Ctrl + Z <를 사용하는 AFAIK/ kbd> 대신).그러나 이것은 당신이 원하는 것이 아니라 null 문자열에 추가로 빈 문자열에 대한 더 나은 테스트가 아니라고 생각합니다.

공통 :) 작업을위한 좋은 API를 가진 멋진 apache commons lang 라이브러리가 있습니다.정적으로 StringUtils 가져 오기를 사용하고 isNotEmpty (String) 메소드를 사용하여 다음을 가져올 수 있습니다. 라코 디스

언젠가는 유용 할 수도 있습니다 :)이 라이브러리에는 다른 유용한 클래스도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top