It's Ward

JAVA String 입력 - Scanner 본문

Java/Java 기본

JAVA String 입력 - Scanner

I'm ward 2022. 5. 26. 00:18

프로그래밍을 하다보면 어떤 입력값을 받는 기능이 필요할 때가 있다.

C언어의 scanf( ), Python의 input( ).. 등이 있고, Java에서는 "입력"을 할 수 있는 클래스가 있다.

바로 BufferedReaderScanner이다. 

 

들어가기 앞서..

Scanner와 BufferedReader를 사용할 때에는 해당 클래스를 호출해야 한다.

 자바에서 사용하는 대부분 클래스는 import를 통해 호출해야한다. 물론 대부분 자바 개발 IDE(Intellij , Eclipse)는 당연하듯이 자동으로 import를 해주거나 간단하게 처리할 수 있지만 다른 환경(웹으로 진행하는 코딩 테스트 환경 - 대표적으로 프로그래머스, 기업 코딩 테스트 등)에서는 수동으로 import를 해야할 때가 있다.

System.in

자바의 표준 입력 스트림으로, 키보드에서 입력받을 때, 사용.

독립적으로도 사용은 가능하나, 바이트 -> 문자나 숫자 변경이 조금 까다롭고, Enter도 함께 입력받아 처리하는 부분을 따로 구현해한다.

 

스캐너 (Scanner)

 

스캐너는 흔히 사용하는 기본적인 데이터 타입(문자열, 정수, 실수.. 등)을 별도의 변환을 걸치지 않아도 Scanner의 메소드를 이용하여 입력받을 수 있어, 편리하게 사용할 수 있는 장점이 있다.

 

1. import 

위에서 언급했듯이 Scanner 클래스를 사용하기 위해서는 반드시 호출해 주어야 한다.

다음과 같이 작성하여, 클래스 경로를 호출하도록 하자.

import java.util.Scanner

 

 

2. Scanner 객체 생성 예시

스캐너 클래스를 사용하기 위해 import를 진행하였다면 

아래와 같이 Scanner 객체를 생성하여, 사용할 수 있다. 다만, 키보드에서 입력받기 위한 스트림인 System.in 이 들어가야한다.

Scanner scan = new Scanner(System.in);

 

3. Scanner 메소드

Scanner의 입력메소드는 다음과 같다. 해당 메소드를 불러오면, Consol창에서 Enter전까지 한번 입력 받을 수 있다.

기본적으로 입력받은 후 해당 타입으로 데이터를 반환한다.

//호출한 클래스.메소드() 
scan.nextByte()		// byte 형 입력
scan.nextShort()		// short 형 입력
scan.nextInt()		// int 형 입력
scan.nextLong()		// long 형 입력
 
scan.nextFloat()		// float 형 입력
scan.nextDouble()		// double 형 입력
 
scan.nextBoolean()	// boolean 형 입력 
 
scan.next()			// String 형 입력 
scan.nextLine()

 

 

메소드는 next + 타입() 의 조합으로 되어있어 편리하게 사용할 수 있다.

다만, char 타입은 따로 없어 next() or nextLine()으로 입력 받은 후 charAt() 메소드를 이용해 문자로 변환해야 한다.  

 

4. Scanner 주의사항

문자열을 입력 받을 때 next()와 nextLine()을 이용해 입력을 받는데, 

next() 혹은 next + 타입()경우 공백이나 enter를 입력받은 경우 구분자로 인식한다.

int num = scan.nextInt(); 
String str = scan.next(); 

//.. etc

ex1) 8을 입력 후 enter -> num에는 8 저장
ex2) "안녕하세요 Ward입니다" 를 입력했을 경우-> str에는 "안녕하세요" 만 저장됨.

nextLine()의 경우 enter만 구분자로 인식한다.

int num2 = scan.nextInt();
String str2 = scan.nextLine();

ex1) 8을 입력 후 enter -> num에는 8 저장 

ex3) num에 8을 입력하기 위한 enter가 저장됨. 프로그램 종료

 

enter를 nextLine에서 입력받아 이상한 결과가 나오게된다

8 (num2 입력) ->  enter (str2 입력) -> "안녕하세요 Ward입니다" <버퍼안에는 존재하나 nextLine을 다시 불러들어야지만 버퍼 내부안에있는것을 꺼내올 수 있음

그래서 next + 타입() 과 nextLine()을 함께 써야하는 경우 nextLine()을 한번 더 사용해 enter를 입력 버퍼에서 없에버린 후 원하는 문자를 입력 받을 수 있다.

int num2 = scan.nextInt();
scan.nextLine();
String str2 = scan.next();

 

Comments