Study/Java

Java: System.in.read(); 이해하기, 입력값을 알뜰하게 받기

devyoseph 2021. 11. 5. 02:44

System.in.read()

Scanner, BufferedReader를 사용하지 않고 입력값을 받을 수 있다.

버퍼(InputStream)를 사용하기 때문에 효율적이며 IOException의 throw를 필수적으로 해주어야 한다.

문자를 하나씩만 가져올 수 있고 아스키 코드로 변환해 가져온다

 

예시를 통한 이해

import java.io.*;
public class Main {
public static void main(String[] args) throws IOException{
	
    for(int i=0; i<10; i++){ //반복문 시행횟수: 10번
        int num = System.in.read();
		System.out.print(num+" / ");
    }
    
}}

위 구문에서 사용자가 1234를 입력하면 어떤 결과값이 나올까?

1에 해당하는 아스키 코드 49부터 주르륵 뜬다

마지막에 10(LF)이 뜬 이유는 입력하기 위해 Enter를 입력했기 때문이다.

 

예제 분석

위의 예시를 통해 단계별로 나누어서 이해해본다

1) 사용자가 1234를 입력한다

2) 버퍼에는 49 → 50 → 51 → 52 순으로 저장된다

3) int num = System.in.read(); 을 통해 위 순서대로 값을 가져온다

 

System.in.read() 사용

int를 통해 숫자나 단일 문자 char로 값을 하나씩 가져온다

숫자로 가져올 때는 아스키 코드 번호에서 48을 빼주고

char로 가져올 때는 아스키 코드를 (char)로 재변환 해준다

 

숫자로 가져오기

import java.io.*;
public class Main {
public static void main(String[] args) throws IOException{
	
    for(int i=0; i<10; i++){
        int num = System.in.read()-48; //48을 빼주면 입력한 숫자를 가져올 수 있다
		System.out.print(num+" / ");
        
        //출력값: ' 1 / 2 / 3 / 4 / -38 / '
    }
    
}}

 

문자로 가져오기

import java.io.*;
public class Main {
public static void main(String[] args) throws IOException{
	
    for(int i=0; i<10; i++){
        char c = (char) System.in.read(); // (char)로 형변환만 해준다
		System.out.print(c+" / ");
    }
    /*출력값: ' 1 / 2 / 3 / 4 / 
             / '                엔터를 쳤기 때문에 엔터가 기록된다*/
    
}}