[JAVA] Scanner클래스 next(), nextLine() 차이

suyeon·2022년 6월 15일
3

JAVA

목록 보기
1/4
post-thumbnail

차이점 : 개행문자를 무시하냐 안하냐의 차이

📌 next()

  • 공백을 기준으로 한 단어 또는 한 문자씩 입력받는다.
  • 버퍼에 입력된 문자나 문자열에서 공백 전까지의 단어를 읽는다.
  • 개행 문자를 가져오지 않는다.
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String str = scan.next();
        System.out.println(str);
    }
}

📌 nextLine()

  • 문자 또는 엔터를 치기 전까지의 문장 전체를 입력받는다.
  • 버퍼에 입력된 문자열을 개행 문자까지 다 가져온다.
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String str = scan.nextLine();
        System.out.println(str);
    }
}

📌 입출력시 주의사항

import java.util.Scanner;

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

        int num;
        String str;
        System.out.println("num입력");
        num = input.nextInt();

        System.out.println("str입력");
        str = input.nextLine();

        System.out.println("num : " + num);
        System.out.println("str : " + str);
        input.close();
    }
}

  • 원했던 입력은 num입력, str입력이다. 하지만, num을 입력하면 바로 출력이 된다.

  • why? next()는 개행문자를 무시하고 입력을 받고 nextLine()은 한줄 단위로 입력을 받기 때문에 개행문자를 포함한다.

  • 좀 더 설명하자면, 위에 출력결과처럼 10을 입력하고 Enter를 쳤다면 버퍼에 10\이 존재한다. 이때 nextInt()가 버퍼의 내용을 가져올 때 개행문자를 무시하고 가져오기 때문에 10만 가져오게 된다. 그러면 버퍼에 \n이 남아있는데 nextLine()은 공백문자, 개행문자를 포함시키기 때문에 \n만 가져오고 프로그램이 종료되는 것이다.

✅ 주의사항 해결방법 1

  • nextLine()을 next()로 바꿔주면 원하는 결과를 얻을 수 있다.
import java.util.Scanner;

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

        int num;
        String str;
        System.out.println("num입력");
        num = input.nextInt();

        System.out.println("str입력");
        str = input.next();

        System.out.println("num : " + num);
        System.out.println("str : " + str);
        input.close();
    }
}

✅ 주의사항 해결방법 2

  • nextInt()와 nextLine() 사이에 nextLine() 또는 skip("\r\n") 을 하나 추가하여 개행 문자를 버퍼에서 없애주면 원하는 문자열을 입력받을 수 있다.
import java.util.Scanner;

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

        int num;
        String str;
        String str1;
        System.out.println("num입력");
        num = input.nextInt();

        str1 = input.nextLine();

        System.out.println("str입력");
        str = input.nextLine();

        System.out.println("num : " + num);
        System.out.println("str : " + str);
        input.close();
    }
}

참고 자료
🔗 next(), nextLine()의 차이

0개의 댓글