초보 프로그램 개발자

[ 2주차 ] Java - 입력 System.in.read(), skip() 본문

교육 일지/java

[ 2주차 ] Java - 입력 System.in.read(), skip()

Ji_HG 2023. 5. 9. 21:33

저번 강의에서 입력 받는 방법으로 BufferedReader와 Scanner를 배웠는데 다른 방법으로

System.in.read() 로 바로 받아오는 방법이 있다.

System.in.read() 는 아스키코드를 받아오는 입력방법이라 1byte인 문자 하나만 받아올 수 있다.

package bbs;

import java.io.IOException;

public class Test {

	public static void main(String[] args) throws IOException {
		int num = System.in.read();
		System.out.print(num);
        // 1을 입력하면 아스키코드인 49가 출력
	}
}

위의 코드에서 num에 1을 입력하게 되면 아스키코드에 있는 49가 출력이 되고,

10을 입력한다 하여도 맨 앞의 1만 적용이 되어 49가 출력이 된다.

System.in.read()는 정수가 반환되어 문자를 입력받기위해서는 형변환이 필요하다

package bbs;

import java.io.IOException;

public class Test {

	public static void main(String[] args) throws IOException {
		
		char ch = (char)System.in.read();
		System.out.print(ch);
		// A를 입력하면 A 출력
	}
}

BufferedReader와 마찬가지로 IOException이 필요하다

System.in.skip()

만약 System.in.read() 를 반복해서 입력을 받고싶다면 skip()을 해주어야 한다.

package bbs;

import java.io.IOException;

public class Test {

	public static void main(String[] args) throws IOException {
		
		char ch = 'y';
		while(true) {
			ch = (char)System.in.read();
			System.out.print(ch);
			
			if(ch != 'y') {
				break;
			}
			System.in.skip(2);
		}
	}
}

위의 코드에서 skip(2)를 해주는 이유는 사용자로부터 'y'를 입력받았을 때, 엔터를 누르게 되면

버퍼에 엔터에 들어가는 \r 과 \n 두개가 포함이 되어 있어 또 입력을 받기 전에 입력하여 버퍼를 비워주는것이다.

 

skip의 파라미터에는 비워줄만큼 넣어주면 되고, 1을 넣을경우 엔터는 사라지지 못한다.

 

아스키코드로 엔터를 표현할 경우 10 과 13이 들어가 있다.

\r 은 맨 앞으로 이동, \n 은 한줄 밑으로 이다.

'교육 일지 > java' 카테고리의 다른 글

[ 2주차 ] Java - 배열  (1) 2023.05.10
[ 2주차 ] Java - switch  (0) 2023.05.09
[ 2주차 ] Java - 반복문_2  (0) 2023.05.09
[ 2주차 ] Java - 반복문(for)  (0) 2023.05.08
[ 2주차 ] Java - 삼항연산자  (0) 2023.05.08