본문 바로가기
개발/자바

스파르타코딩클럽 Java 문법 종합반 1주차 - nextLine()

by mabyoungg 2023. 6. 13.

Scanner를 사용해서 10개의 입력값을 받는다고 하면 두번째 줄이 공백으로 나오는 현상이 발생했다. 

원인은 nextInt()로 입력받고 이후 nextLine()으로 입력받으려고 하면 남아있던 개행문자가 입력으로 받아지기 때문에 제대로 된 입력을 받지 못하였다.  

 

다음 예를 통해 알아보자.

next(), nextInt() 등 공백, 개행문자 전까지 읽는다.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int test1 = sc.nextInt();   // 1234 1234 1234 11111

        System.out.println(test1); // 1234
    }
}

nextLine()는 공백 상관없이 개행문자까지 읽는다.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String test2 = sc.nextLine(); // 테스트1234 테스트1234
 
        System.out.println(test2); // 테스트1234 테스트1234
    }
}

 

* 1을 입력하고 엔터, 테스트 엔터를 치는순간 종료되고 1 출력, 빈 줄 출력, 테스트 출력이 된다.

원인은 1를 입력하고 엔터를 입력하면 버퍼에는 1\n라고 존재하고 nextInt는 개행문자를 가져가지 않기 때문에 1만 가져가고 버퍼에는 \n 남게 된다. 다음 nextLine은 개행문자까지 읽기 때문에 \n를 가져가고, 마지막 nextLine는 정상적인 입력을 받는다.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int test1 = sc.nextInt(); // 1
        String test2 = sc.nextLine(); // \n
        String test3 = sc.nextLine(); // 테스트

        System.out.println(test1); // 1
        System.out.println(test2); // \n
        System.out.println(test3); // 테스트

    }
}

 

해결방법 1

nextInt() 다음에 sc.nextLine() 넣어 개행문자를 제거한다.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int test1 = sc.nextInt();

        sc.nextLine();

        String test2 = sc.nextLine();
        String test3 = sc.nextLine();

        System.out.println(test1);
        System.out.println(test2);
        System.out.println(test3);

    }
}

 

해결방법 2

nextLine() 입력받고 Integer.parseInt(), Float.parseFloat()등으로  변환한다.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int test1 = Integer.parseInt(sc.nextLine());
        String test2 = sc.nextLine();
        String test3 = sc.nextLine();

        System.out.println(test1);
        System.out.println(test2);
        System.out.println(test3);

    }
}