개발 ━━━━━/Java

[Java] Input 값 입력 받는 방법 ① - Scanner 클래스

GukJang 2023. 8. 16. 01:41
반응형

Scanner 클래스

Scanner 클래스의 특징

  1. Scanner 를 사용 시 java.util 패키지의 Scanner 클래스를 import 해주어야 한다.
  2. 입력 받을 시 Scanner 클래스의 메서드 (method) 로 입력받을 수 있다.
  3. Scanner 클래스의 입력 메소드들은 공백과 개행을 기준으로 인식한다.

 

Scanner 사용 순서

1. Scanner 클래스를 import 해준다.

import java.util.Scanner;

 

2. Scanner 객체를 생성한다.

Scanner sc = new Scanner(System.in);
// System.in - 입력한 값을 Byte 단위로 읽어주는 Java 의 표준 입력 스트림

 

3. 생성한 객체를 이용해 데이터 타입마다 구분된 메서드로 입력 값을 받는다.

String str = sc.next();
메소드 기능
next() String을 읽음. 토큰(Token)을 기준으로 읽음.
nextLine() String을 읽음. 개행(Enter)을 기준으로 읽음.
nextInt() int 를 읽음
nextBoolean() boolean 을 읽음
nextByte() byte 를 읽음
nextShort() short 를 읽음
nextLong() long 을 읽음
nextFloat() float 를 읽음
nextDouble() double 을 읽음

( * 토큰(Token) : 공백문자 (Spacebar, Tab, Enter 등) 로 구분되는 요소)

 

import java.util.Scanner;

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

 

next() vs nextLine()

import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
 
        int num;
        String str;
        System.out.println("num입력");
        num = sc.nextInt();
 
        System.out.println("str입력");
        str = sc.nextLine();
 
        System.out.println("num : " + num);
        System.out.println("str : " + str);
        sc.close();
    }
}

// 출력
num : 10
str :

코드의 의도는 num 과 str 을 입력받는 것인데 num 을 입력하고 나면 str 입력은 스킵되고 바로 주석에 있는 대로 출력된다.

 

이는 next() 는 개행 문자를 무시하고 입력을 받고, nextLine() 은 \n 단위로 입력을 받기 때문인데

위 코드에서 num 을 next() 로 입력받을 때 10을 입력 후 enter (\n) 을 쳤지만 10 까지만 인식하고 \n 은 버퍼에 그대로 남게 된다.

str 은 nextLine() 으로 입력을 받는데 버퍼에 이미 \n 이 남아있기 때문에 따로 입력 과정을 거치지 않고 바로 결과값이 출력되게 된다.

 

* 해결 방법

nextLine() 을 next() 로 바꿔준다.

반응형