방법
- BufferedReader, InputStreamReader, System.in
- Scanner
1. BufferedReader, InputStreamReader, System.in
System.in
일반적으로 keyboard 입력을 지칭하는 Standard Input Stream
InputStreamReader
- InputstreamReader (InputStream in)
- InputstreamReader (InputStream in, String charsetName)
- InpustreamReader(InputStream in, Charset cs)
- InputstreamReader(InputSream in, CharseDecoder dec)
byte stream을 charset stream으로 변경해주는 역할을 함
InputStreamReader 클래스는 생성자의 파라미터로 InputStream 객체를 전달받음
(InputStream 객체의 종류에 따라서, 키보드 사용자 입력을 읽어들일 수도 있고, 파일의 내용을 읽어들일 수도 있음,
또한, 생성자의 파라미터로 charset 정보를 받아서, 읽어들이는 stream의 charset을 지정할 수 있음 )
BufferedReader
- BufferedReader(Reader in)
- BufferedReader(Reader in, in sz)
효율적으로 문자를 읽어들이기 위해서 버퍼링을 해줌
기본 버퍼 사이즈를 그대로 사용해도 되고, 생성자를 이용해 버퍼 사이즈를 지정해 줄 수도 있음
보통, FileReader, InputStreamReader의 read()와 같이 비용이 많이드는 Reader를 파라미터로 전달받아서 사용함
만약, BufferedReader 업이 FileReader나 InputStreamReader를 사용하면 시스템은 바이트별로 사용자의 입력을 받아서 처리하는 동작을 반복함 (시스템에서 IO는 자원소모가 많음)
BufferedReader를 사용하면, 시스템은 버퍼가 비어있을 때만, 실제 IO를 일으켜서 데이터를 읽어오고, 나머지 경우에는 메모리에 있는 버퍼의 데이터를 읽어서 처리함
예제
public static void main(String[] args) throws IOException {
BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
String str=reader.readLine();
System.out.println(str);
}
BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
BufferedReader, InputStreamReader, System.in을 이용해 키보드 사용자 입력을 받을 수 있는 객체를 생성
String str=reader.readLine()
BufferedReader의 readLine() 메소드를 이용해 사용자 입력 한 줄을 받음
public static void main(String[] args) throws IOException {
BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
String str;
while((str=reader.readLine()).equals("\n")){
System.out.println(str);
}
}
반복적으로 계속해서 한줄씩 사용자 입력을 받고 출력
2. Scanner
Scanner 클래스를 이용하면, BufferedReader보다 조금 더 쉽게 사용자의 키보드 입력을 받을 수 있음
또한, 입력받은 데이터를 Scanner 클래스의 메소드를 이용, 좀 더 쉽게 가공할 수 있음
예제 1
public static void main(String[] args) throws IOException {
Scanner scanner=new Scanner(System.in);
System.out.println("문자열을 입력하세요: ");
String str=scanner.nextLine();
System.out.println("정수를 입력하세요: ");
int n=scanner.nextInt();
System.out.println("실수를 입력하세요: ");
float fn=scanner.nextFloat();
System.out.println("true/false를 입력하세요: ");
boolean bool=scanner.nextBoolean();
System.out.println(str);
System.out.println(n);
System.out.println(fn);
System.out.println(bool);
scanner.close();
}
Scanner scanner=new Scanner(System.in);
Scanner로 Standard Input Stream을 전달해, 키보드에서 입력을 받을 수 있는 Scanner 객체를 하나 생성
scanner.nextLine()
입력 받을 데이터 한 줄을 읽어서, String으로 리턴
scanner.nextInt();
scanner.nextFloat();
scanner.nextBoolean();
Scanner의 nextXXX() 메소드를 이용해 사용자로부터 입력받은 토큰(token)을 String, int, boolean 등의 타입으로 변환할 수 있음
(여기에서 token은 공백 문자 ('\n',\f, \r,' ', \n)를 말함)
+ nextBigDecimal(), nextBigInteger(), nextByte(), nextDouble(), nextLong(), nextShort() 메소드를 사용해 입력받은 데이터를 원하는 타입으로 변환할 수 있음
scanner.close()
다 사용한 scanner는 close 해줘야 함
예제 2: Scanner로 사용자 입력 반복해서 받기
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(System.in);
while(scanner.hasNextLine()){
String str=scanner.nextLine();
System.out.println(str);
}
scanner.close();
}
scanner.hasNextLine()
이 메소드는 Scanner가 더 읽어들일 Line이 있는지를 체크하여 true/false를 리턴
이 메소드는 더 읽어들일 Line이 있는지 검사만 할 뿐, 실제로 값을 읽어들이지 않음
따라서, hasNextLine()으로 더 읽어들일 Line이 있는지 while의 조건문에서 검사한 후, 읽어들일 값이 있으면(hasNextLine()의 결과가 true이면) while문의 body에서 nextLine() 메소드를 이용해 실제 값을 읽도록 처리함
예제 3: Scanner로 token 단위로 사용자 입력 처리하기
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext()){
String str=scanner.next();
System.out.println(str);
}
scanner.close();
}
token(공백)별로 사용자 입력값을 읽어들임
scanner.hasNext()
hasNext() 메소드를 이용해 다음으로 읽어들일 token이 있는지 체크
scanner.next()
token 별로 입력값을 읽어들여서 String을 리턴
'JAVA > [JAVA] 기초 문법' 카테고리의 다른 글
| [자료형] 상수 집합 (0) | 2026.01.11 |
|---|---|
| [자료형] 맵과 집합 (1) | 2026.01.11 |
| [자료형] 배열과 리스트 (1) | 2026.01.11 |
| [자료형] 문자와 문자열 (0) | 2026.01.08 |
| [자료형] 숫자 (0) | 2026.01.07 |