Input/Output
Input
Scanner 객체
1) java.util.Scanner를 import
import java.util.Scanner;
2) Scanner객체 생성
Scanner sc = new Scanner(System.in);
3) 객체의 메서드를 적절히 활용하여 입력 받음
int a = sc.nextInt(); //정수
double d = sc.nextDouble(); //실수
long l = sc.nextLong(); //정수
String s = sc.nextLint(); //문자열
Output
1. System.out.print(); <-> System.out.println();
: 출력 메서드(개행X) : 출력 메서드(개행O)
- 파라미터: 참조형, 기본형
2. System.out.printf()
- 서식 지정자를 통해 값을 특정 형식으로 출력할 수 있게 하는 메서드
방식: 형식 문자열 내에 서식 지정자를 넣고 그 자리에 값을 삽입
형식 지정자 |
설명 |
예시 |
%n |
개행 |
System.out.printf("개행전%n개행후"); |
%d |
Integer 형식 출력 |
System.out.printf("사람 %d명", 3); |
%f |
Float 형식 출력 |
System.out.printf("%f", 3.14); System.out.printf("%.8f", 3.14159265); |
%c %C |
Char 형식 출력 |
System.out.printf("%c", 65); // A |
%s %S |
String 형식 그대로 출력 String 형식 대문자 출력 |
System.out.printf("%s", Hello); //Hello System.out.printf("%S", Hello); //HELLO |
%b %B |
Boolean 형식 소문자 출력 Boolean 형식 대문자 출력 |
System.out.printf("%b", null); //false System.out.printf("%B", null); //FALSE |
%x %X |
16진수 Integer 형식 소문자 출력 16진수 Integer 형식 대문자 출력 |
System.out.printf("%x", 26); //1a System.out.printf("%X", 26); //1A |
%o |
8진수 Integer 형식 출력 |
System.out.printf("o", 26); //32 |
%e %E |
지수 형식 소문자 출력 지수 형식 대문자 출력 *실수값만 전달받을 수 있음* |
System.out.printf("e", (double)300000); //3.000000e+05 System.out.printf("E", 0.000003); //3.000000E-06 |
BufferedReader / BufferedWriter
예외처리
: throws IOException 필수
- 이유: readLine()에 입력된 값이 null일 경우 IOException을 반환하기 때문이다.
import java.io.IOException;
public class Main{
public static void main(String[] args) throws IOException{
//코드
}
}
BufferedReader
1) java.io.BufferedReader와 java.io.InputStreamReader를 import(ctrl + shift + o 이클립스 자동 import)
import java.io.BufferedReader;
import java.io.InputStreamReader;
2) BufferedReader 객체 생성
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
3) readLine()을 통해 입력을 받음
String s = br.readLine();
- 다른 타입 원하면 형변환 필수(리턴값(고정): String)
형변환 |
형식 |
int |
Integer.parseInt() |
long |
Long.parseLong() |
double |
Double.parseDouble() |
float |
Float.parseFloat() |
boolean |
Boolean.parseBoolean() |
char |
Character.forDigit() |
- 예외 처리 필수
방법 1) throws IOException(추천)
(1) import java.io.IOException;
(2) public static void maint(String[] args) throws IOException{}
방법 2) try & catch
- 공백단위 가공 시(읽어들인 데이터가 Line 단위로만 분리되기 때문)
방법 1) StringTokenizer의 nextToken 함수 사용(추천)
(1) import java.util.StringTokenizer;
(2) StringTokenizer 객체 생성
(3) nextToken()을 사용해 공백 단위로 구분된 데이터 할당
//입력: 10 20
StringTokenizer st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken()); // 10
int b = Integer.parseInt(st.nextToken()); // 20
방법 2) String.split() 사용
String s = br.readLine();
String[] words = s.split(" ");
BufferedWriter
1) java.io.BufferedWriter과 java.io.OutputStreamWriter를 import(ctrl + shift + o 이클립스 자동 import)
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
2) BufferedWriter 객체 생성
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
3) write()을 통해 버퍼 내 값 출력
// 숫자를 출력하고자 한다면 형변환이 필요하다.
String s = br.readLine();
bw.write(s);
Int a = Integer.parseInt(br.readLine());
bw.write(Integer.toString(a));
4) flush() / close()로 뒤처리
flush(): 남아있는 데이터 모두 출력(스트림 비움)
close(): 출력 스트림 닫음
+ BufferedWriter의 메서드
1) 개행: newLine()
bw.newLine(); // 개행
2) char 배열의 일정 구간 출력: write(배열명, 시작점, 길이)
char[] bf = {'h', 'e', 'l', 'l', 'o'};
writer.write(bf, 0, 5); //hello
3) 문자열의 일정 구간 출력: write(문자열명, 시작점, 길이)
String s = "hello";
writer.write(s, 0, 5); //hello
4) 한 글자 출력: write(int c) //유니코드
writer.write(65); //A