System.in 필드

: InputStream 타입의 출력 스트림 → InputStream 타입으로 타입 변환 가능

InputStream is = System.in;

 

read() 메소드

: 키보드로부터 어떤 키가 입력되었는지 확인

: 리턴된 int값엔 아스키코드가 들어있음

int asciiCode = is.read();

 

숫자로된 아스키 코드 대신에 키보드에서 입력한 문자를 직접 얻고 싶다면 read() 메소드로 읽은 아스키 코드를 char로 타입 변환하면 된다.

char inputChar = (char) is.read();

char inputChar = (char) 97;

inputChar = 'a' 가 된다.

 

콘솔에서 입력한 번호 알아내기

package sec03.exam01_system_in_out_YJ;

import java.io.IOException;
import java.io.InputStream;

public class SystemInExample1 {
	public static void main(String[] args) throws Exception {
		System.out.println("==== 메뉴 ====");
		System.out.println("1. 예금 조회");
		System.out.println("2. 예금 출금");
		System.out.println("3. 예금 입금");
		System.out.println("4. 종료 하기");
		System.out.print("메뉴를 선택하세요> ");
		
		InputStream is = System.in; //키보드 입력 스트림 얻기
		char inputChar = (char) is.read(); //아스키 코드를 읽고 문자로 리턴
		switch(inputChar) {
			case '1' :
				System.out.println("예금 조회를 선택하셨습니다.");
				break;
			case '2' :
				System.out.println("예금 출금을 선택하셨습니다.");
				break;
			case '3' :
				System.out.println("예금 입금을 선택하셨습니다.");
				break;
			case '4' :
				System.out.println("종료를 선택하셨습니다.");
				break;			
		}		
	}
}
==== 메뉴 ====
1. 예금 조회
2. 예금 출금
3. 예금 입금
4. 종료 하기
메뉴를 선택하세요> 3
예금 입금을 선택하셨습니다.

 

키보드로 입력된 한글을 얻기 위해서는 우선 read(byte[] b)나 read(byte[] b, int off, int len) 메소드로 전체 입력된 내용을 바이트 배열로 받고, 이 배열을 이용해서 String 객체를 생성하면 된다.

메소드를 사용하기 전에 우선 키보드에서 입력한 문자를 저장할 바이트 배열을 만들어야 한다.

 

콘솔에서 입력한 한글 알아내기

package sec03.exam01_system_in_out_YJ;

import java.io.IOException;
import java.io.InputStream;

public class SystemInExample2 {
	public static void main(String[] args) throws Exception {
		InputStream is = System.in;
		
		byte[] datas = new byte[100];
		System.out.print("이름: ");
		int nameBytes = is.read(datas);
		String name = new String(datas, 0, nameBytes-2); //끝에 2 바이트는 Enter키에 해당하는 캐리지 리턴(13)과 라인 피드(10)이므로 문자열에서 제외시킴
		
		System.out.print("하고 싶은 말: ");
		int commentBytes = is.read(datas);
		String comment = new String(datas, 0, nameBytes-2); //끝에 2 바이트는 Enter키에 해당하는 캐리지 리턴(13)과 라인 피드(10)이므로 문자열에서 제외시킴
		
		System.out.println("입력한 이름: " + name);
		System.out.println("입력한 하고 싶은 말: " + comment);
	}
}
이름: 코스모
하고 싶은 말: Hello
입력한 이름: 코스모
입력한 하고 싶은 말: Hello

 

+ Recent posts