Java에서 키보드 문자 입력 방법에 대해서 정리해봅니다.
C언어로 이야기 하자면 scanf() 에 해당할 수 있습니다.
총 3가지 있으며 결론 부터 이야기 한다면,
방법1. Scanner 객체 사용
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | Scanner scn = new Scanner(System.in); byte byt = scn.nextByte(); short srt = scn.nextShort(); long lng = scn.nextLong(); float flt = scn.nextFloat(); double dbl = scn.nextDouble(); boolean ble = scn.nextBoolean(); String strLine = scn.nextLine(); String str = scn.next(); | cs |
위와 같은 방법으로 Scanner 객체를 생성하고 System.in 을 연결 시켜주면 표준입력스트림을 받아 볼 수 있다.
Enter 입력 예외처리
그런데, 여기서 주의 깊게 봐야할 점이 있다.
바로, 문자열을 입력 받을 때 사용하는 함수가 두개가 있는 점이다.
1 2 | String str = scn.next(); String strLine = scn.nextLine(); | cs |
두 개의 차이점은 무엇인가?
next()는 공백 단위로 문자열을 읽는다. nextLine()는 Enter 단위로 문자열을 읽는다. (Enter 입력은 \r\n 으로 구성된 두개의 문자이다.) |
그래서 next()와 nextLine()을 섞어서 사용할 때 주의 할 점이 있다.
1 2 3 4 5 6 7 8 9 10 | Scanner scn = new Scanner(System.in); System.out.println("배열 크기를 입력하세요"); int ArraySize = scn.nextInt(); String[] strArray = new String[ArraySize]; System.out.println("문자열을 스페이스바로 띄워서 입력해주세요."); String strInput = scn.nextLine(); | cs |
위와 같은 예제에서
next() 실행 라인에서 숫자 2와 Enter를 입력 시, nextLine()에서 입력을 기다리지 않고 바로 통과 되어 버린다.
그 이유는, nextInt()가 실행될때 숫자 2만 읽고, Enter(\r\n)값은 입력 스트림 버퍼에 남아 있기 때문이다.
따라서, nextLine() 실행 시, 남아 있는 Enter 값을 읽어 들이고 통과하게 된다.
따라서, 원하는 대로 동작하려면 아래와 같이 수정 해야 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Scanner scn = new Scanner(System.in); System.out.println("배열 크기를 입력하세요"); int ArraySize = scn.nextInt(); /*!!!!!!!!!!!!! Enter 입력처리 !!!!!!!!!!!!!!*/ scn.nextLine(); String[] strArray = new String[ArraySize]; System.out.println("문자열을 스페이스바로 띄워서 입력해주세요."); String strInput = scn.nextLine(); | cs |
방법2. System.in.read() 함수 사용
두 번째 방법으로 System 클래스에서 제공하는 read() 라는 함수를 이용하여 키보드 입력을 받아보자.
read() 함수는 1byte 크기만 입력스트림에서 읽어와 ASCII 코드에 해당하는 int 값을 리턴한다.
그래서 문자를 입력받을때 주로 사용한다.
1 2 3 4 5 | //문자 a 저장 char chr = (Char)System.in.read(); //문자 a 대신 97숫자 저장 int ascii = System.in.read(); | cs |
Enter 입력 예외처리
1 2 3 4 5 | char chr = (Char)System.in.read(); /*!!!!!!!!!!!!! Enter 입력처리 !!!!!!!!!!!!!!*/ System.in.read(); System.in.read(); | cs |
1 2 3 4 | char chr = (Char)System.in.read(); /*!!!!!!!!!!!!! Enter 입력처리 !!!!!!!!!!!!!!*/ System.in.skip(2); | cs |
방법3. BufferedReader 객체 사용
1 2 3 | BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); String srt = in.readLine(); | cs |
'컴퓨터' 카테고리의 다른 글
[Linux] 절전(대기) 모드 해제 (1) | 2017.04.22 |
---|---|
ONVIF 국제 보안 표준 프로토콜 (2) | 2017.03.01 |
[5][라즈베리파이 홈서버 구축] 외장하드 절전 모드 추가하기 (0) | 2017.02.11 |
웹 플러그인 설치 유무 및 버전 확인 방법 (How to validate web plug-In) (0) | 2016.11.22 |
ESP8266 개발하기 Step1 개발환경 구축 (0) | 2016.06.26 |