Java

JAVA - 입력받기 ( Scanner.next, nextLine )

비망노트 2022. 6. 26. 16:53

- 자바 입력받기

 

Scanner 클래스

 

1. Scanner의 메소드를 사용해 입력받을 수 있음

  • 문자열로 입력받을 시 next() , nextLine()
  • 정수로 입력받을 시 nextInt()
package exercise;
import java.util.Scanner;

public class ExerciseNote {

    public static void main(String[] args) {
    	
        // 예제  입력값 : 123
    	Scanner sc = new Scanner(System.in);

    	int num;
    	String str;
    	
    	System.out.print("입력하세요.");
    	num = sc.nextInt();
    	str = sc.nextLine();
    	System.out.println(num+456);
    	System.out.println(str+456);
    }
}
/*  output

입력하세요.123 <- 직접 입력한 값.
579
456

*/

1. 콘솔창에서 123을 직접 입력했고

2. num은 nextInt로 정수로 입력을 받으며 값을 가져갔다.

3. str은 nextLine으로 가져가려는데 입력값이 123 하나였으므로 빈문자열만 반환된다.

4. 따라서 정수 num 에는 456이 산술연산돼어 정수 579이 출력되었고

5. str은 문자열인데 입력값이 없었으므로 빈 문자열에 456이 합쳐져 문자열 456이 출력됨

 

 

2. Scanner사용 시 util 패키지의 Scanner 클래스를 호출해야함

  • 자바에서 사용되는 대부분의 클래스는 lang패키지가 아니라면 import로 호출 해주어야한다.
import java.util.Scanner; // Scanner 클래스 호출
// import java.util.*;

 

 

3. 입력값이 여러개라면 구분은 공백 또는 줄바꿈을 기준으로 읽음.

 

 

 

nextInt, next, nextLine

 

⭕ nextInt

package exercise;
import java.util.Scanner;

public class ExerciseNote {

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

    	int num;
    	int num2;
    	int num3;
    	
    	System.out.println("입력하세요.");
    	num = sc.nextInt();
    	num2 = sc.nextInt();
    	num3 = sc.nextInt();
    	System.out.println("num : "+num);
    	System.out.println("num2 : "+num2);
    	System.out.println("num3 : "+num3);
    }
}
ex1. ex2. ex3.

✅ 설명 

●  num, num2, num3 은 셋다 sc.nextInt(); 로 값을 받아야하기 때문에 입력값이 세개필요함

  ex1.

    123 456 789를 띄어쓰기로 한줄로 입력하고 엔터를 누르면 입력값이 세개이기때문에 실행되지만

  ex2.

    123만 입력하고 엔터를 누르면 입력값이 아직 2개 부족하기때문에 다음줄에서 다시 입력대기상태가된다.

  ex3.

     123 456 789 222 333 444 총 입력값이 6개인상태지만 세개만 필요하므로 앞의 123 456 789만 사용.

 

⭕ nextLine, next

package exercise;
import java.util.Scanner;

public class ExerciseNote {

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

    	String str;
    	String str2;
    	
    	System.out.println("입력하세요.");
    	str = sc.nextLine();
    	str2 = sc.next();
    	System.out.println("str : "+str+100);
    	System.out.println("str2 : "+str2+1000);
    }
}
ex1. ex2. ex3.
 
 
 

✅ 설명 

●  str 은 nextLine을 썼기때문에 한줄단위로 입력을 받기때문에

    다음의 next에도 값을 넣어주려면 총 2줄의 입력값이 필요

  ex1. 

    똑같이 123 456 789를 입력했지만 nextLine은 한줄을 통째로입력받았고

    next는 띄어쓰기기 전까지의 한 값만 입력받게된다.

  ex3. 에서 next와 nextLine의 큰 차이점이 나온다.

    nextLine은 공백과, 개행또한 입력값으로 이해하고

    next는 공백과 개행문자는 무시한다.

     

 

이렇게 입력값을 받는 과정에서 next로 먼저받고 그 뒤에 nextLine 으로 받게 된다면?

package exercise;
import java.util.Scanner;

public class ExerciseNote {

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

    	String str;
    	String str2;
    	
    	System.out.println("입력하세요.");
    	str = sc.next();	// 위에 next
    	str2 = sc.nextLine();   // 밑에 nextLine
    	System.out.println("str : "+str+100);
    	System.out.println("str2 : "+str2+1000);
    }
}
ex1. ex2.

✅ 설명

●  next는 공백과 개행을 무시하고 입력값을 받고

    nextLine은 공백과 개행을 포함한다.

●  ex1.

    입력값이 str,str2두개필요한데 123하고 엔터누르니까 실행이되버린다? 라고 당황할 수 있다.

    123+엔터(즉 개행),  123은 str이 next로 받아가고 str2는 개행도 포함해서 이해하므로 개행을가져간다

●  ex2.

     next가 먼저 적혀있으니 입력값이 필요한데 계속 개행만 하니까 입력값을 적을때까지 입력대기상태가 된다.

 

 

종합

package exercise;
import java.util.Scanner;

public class ExerciseNote {

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

    	int num;
    	String str;
    	String str2;
    	int num2;
    	int num3;
    	
    	System.out.println("입력하세요.");
    	num = sc.nextInt();
    	str = sc.nextLine();
    	str2 = sc.next();
    	num2 = sc.nextInt();
    	num3 = sc.nextInt();
    	System.out.println("num : "+num);
    	System.out.println("str : "+str+100);
    	System.out.println("str2 : "+str2+1000);
    	System.out.println("num2 : "+num2);
    	System.out.println("num3 : "+num3);
    }

}
ex1. ex2.

✅ 설명

●  next는 공백과 개행을 무시하고 입력값을 받고

    nextLine은 공백과 개행을 포함한다.

●  ex1. 

    num이 123을 받았고 띄어쓰기가있는데 nextLine은 공백,개행을 포함하므로 " 456"이 들어감 (공백)456임

●  ex2. 

     num이 123을 받았고 개행하는데 nextLine이 개행을 입력값으로 받아가서 str2가 next로 456을 받아간것.

 

 종합 next, nextLine 위치바꿈

	int num;
    	String str;
    	String str2;
    	int num2;
    	int num3;
    	
    	System.out.println("입력하세요.");
    	num = sc.nextInt();
    	str = sc.next();	// 위가 next
    	str2 = sc.nextLine();	// 아래가 nextLine
    	num2 = sc.nextInt();
    	num3 = sc.nextInt();
    	System.out.println("num : "+num);
    	System.out.println("str : "+str+100);
    	System.out.println("str2 : "+str2+1000);
    	System.out.println("num2 : "+num2);
    	System.out.println("num3 : "+num3);

 

ex1. ex2.

✅ 설명

●  ex1. 

    num이 123을 받았고 str이 next이므로 띄어쓰기로 구분된 다음 값 456을 받았는데

    여기서 개행할때 nextLine인 str2가 개행을 받아감 공백이아니고 개행이므로 (공백)1000이 아님

    그리고 입력값이 111 222 333 세개중 num2, num3에 111 222 가 쓰이고 333은 사용되지않음

●  ex2. 

     num이 123을 받았고 str이 456, 마찬가지로 개행을 str2가 가져감

 

 

- Scanner클래스의 메소드

메소드 설명
String next() 다음 토큰을 문자열로 리턴
byte nextByte() 다음 토큰을 byte 타입으로 리턴
short nextShort() 다음 토큰을 short 타입으로 리턴
int nextInt() 다음 토큰을 int 타입으로 리턴
long nextLong() 다음 토큰을 long 타입으로 리턴
float nextFloat() 다음 토큰을 float 타입으로 리턴
double nextDouble() 다음 토큰을 double 타입으로 리턴
String nextLine() \n을 포함하는 한 라인을 읽고
\n을 버린 나머지만 리턴
boolean hasNext() 현재 입력된 토큰이 있으면 true,
아니라면 새로운 입력이 있을때까지 무한정 기다리고,
새로운 입력이 들어오면 그때 true리턴,
ctrl + z 키가 입력되면 입력끝이므로 false 리턴

 

 

 

'Java' 카테고리의 다른 글

JAVA - 문자열 분리 ( StringTokenizer )  (0) 2022.06.29
JAVA - 문자열 분리 ( split )  (0) 2022.06.28
JAVA - 입력받기 ( BufferedReader )  (0) 2022.06.27
JAVA - 역슬래시 ( \ )  (0) 2022.06.26
JAVA - 출력 ( printf 출력형식 )  (0) 2022.06.25