자바 입력시 마지막줄

  • wrongful
    wrongful

    자주 하는 실수 모음에 보면 아래의 내용이 있는데요.

    테스트 데이터 마지막에 개행 문자가 존재한다는 보장은 없습니다. 구현과 환경에 따라 이 부분이 문제를 일으키기도 합니다.

    자바에서 이부분을 어떻게 처리 하면 되는지 아시는분 혹시 계신가요? 외부 라이브러리에서는 지원하는 것도 있는듯 한데.. 자바JDK 에 있는 System.in이나 Scanner에서는 마지막 개행문자가 없는경우 마지막줄을 읽지 못하는데요..

    혹시 방법이 있다면 답변해 주시면 감사하겠습니다.


    9년 전
5개의 댓글이 있습니다.
  • Being
    Being
        public static void main (String[] args)
        {
            Scanner sc = new Scanner(System.in);
            while (sc.hasNextLine())
            {
                String line = sc.nextLine();
                System.out.println(line);
            }
        }
    

    문제없이 잘 작동하는 것 같습니다. System.in 이야 그냥 바이트에 대한 입력스트림이니 마지막 줄애 개행문자가 있건 없건 똑같이 동작할 것 같네요.


    9년 전 link
  • wrongful
    wrongful

    답변주신 코드도 마지막에 enter를 입력해야만 마지막줄이 화면에 나오게 되는데..

    예제 입력값이
    abc 인 경우와 abc\n 인 경우에 abc인 경우는 복사후 붙여 넣기를 한후 enter를 입력해야 될것이고 abc\n의 경우는 그냥 붙여넣기만 해도 답이 나오게 되겠죠.. 이 질문이었는데...

    답변주신 내용으로 작성하면 모든 입력을 받을수있다고 가정한다면...

    입력을 잘못받아 생긴 문제가 아니라 제가 특수 상황을 처리 하지 못해서 오답이 나오는경우일수도있겠군요...

    답변 감사 드립니다.


    9년 전 link
  • Being
    Being

    아, "화면"을 통해 입력하시는 경우는 터미널에서 엔터를 칠 때 내용을 표준입력으로 보내기 때문에 상황이 다릅니다. 채점할 때에는 파일을 표준입력으로 보내기 때문에 문제가 없습니다.

    정확히 테스트하고자 하신다면 데이터를 파일에 담아

    java MyClass < input.txt 와 같이 해 보시기 바랍니다.


    9년 전 link
  • wrongful
    wrongful

    답변 감사드립니다. 꾸벅.


    9년 전 link
  • Being
    Being

    네, 덧붙이자면 화면으로 테스트를 해 보고 싶으시면 환경에 따라 Ctrl-D나 Ctrl-Z 등으로 EOF를 보내 보시면 됩니다.


    9년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.