728x90
반응형
1. 개요
관심 분야를 백엔드로 정하면서 스프링을 공부해보고싶다는 생각이 들었다. 하지만 스프링을 공부하기 위해서는 자바를 알아야하기 때문에 평소 알고리즘도 C++로 풀었지만 이제부터는 자바로도 같이 풀어보려고한다.
Java로 알고리즘을 풀으려고 하니 입출력이 너무 어려웠다. Scanner, BufferedReader, tokenizer 등등 그래서 자바를 천천히 공부해보기로 결심하고 입출력부터 정리해보려고 한다. Java Study Start!!
입력
1. Scanner & BufferedReader
import java.io.InputStreamReader;
import java.util.Scanner;
public class Study {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(new InputStreamReader(System.in));
String input = sc.nextLine();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
//BufferedReader로 받은 값을 StringTokenizer을 사용하여 ','와 ' '를 기준으로 split해서 start와 end에 저장할거야!
StringTokenizer st = new StringTokenizer(br.readLine(), ", ");
int start = Integer.parseInt(st.nextToken());
int end = Integer.parseInt(st.nextToken());
}
}
클래스 | 메소드 | 리턴타입 | 작동방식 |
BufferedReader | read() | int | 문자 하나를 읽어 int형으로 리턴. |
readLine() | String | 한 줄의 문자열을 읽음 | |
skip(n) | long | n개의 문자를 스킵하고 넘어간다. | |
BufferedWriter | write(s) | - | 문자 또는 문자열 s를 출력한다. |
newLine() | - | 빈 줄을 작성한다. | |
flush() | - | 남은 값들을 모두 출력시킨다. | |
close() | - | 스트림을 종료한다. |
Scanner & BufferReader의 차이점
1. 속도
둘은 용도는 똑같지만 속도에서 차이가 나는 이유는 버퍼 사용 여부의 차이에 있다.
Scanner는 1KB 크기의 버퍼를 갖기 때문에 입력이 바로 전달되는 반면 BufferedReader는 8KB의 크기의 버퍼를 가져 버퍼에 입력을 저장했다가 한번에 전송하기 때문에 속도가 훨씬 더 빠르다.
또한 Scanner는 입력을 읽는 과정에서 정규 표현식 적용, 입력 값 분할 파싱 과정 등을 거치기 때문에 속도가 느리다.
2. 예외처리
간단하게, Scanner에서는 필요없지만 BufferReader를 사용할 때에는 예외처리를 해주어야 한다.
Scanner
- Scanner에서 System.in을 생성시에 내부에서 try-catch를 사용하여 예외처리를 하기 때문에 예외처리를 하지 않아도 된다.
BufferedReader
- BufferedReader 클래스의 메소드들을 입출력에러가 발생할 경우 자체적으로 IOEception을 던지도록 정의 되어있기 때문에 메인함수를 작성할때 매개변수 옆에 throws IOEception을 적어 예외처리를 해준다.
3. StringTokenizer
C++에서는 cin >> num1 >> num2;로 받으면 됐지만 Java공부를 시작하니 int형을 어떻게 연속적으로 받는지 궁금해졌다.
처음 알게된 스트링을 자르는 메소드는 split이었다.
- Split 메소드는 String 클래스에 속해있는 메소드이고 Stringtokenizer은 java.util에 포함되어있는 클래스이다
- Split은 정규표현식으로 구분하고 Stringtokenizer은 문자로 받는다.
- Split은 빈 문자열을 토큰으로 인식하지만 Stringtokenizer은 빈 문자열을 토큰으로 인식하지 않는다.
- Split은 데이터를 토큰으로 잘라낸 후 배열에 담아서 반환하기 때문에 Stringtokenizer가 성능이 더 좋다.
import java.io.*;
import java.util.*;
class playGround {
public static void main(String[] args) throws IOException{
String str = "Java Study Start";
String str020 = "Java Study Hard";
StringTokenizer st = new StringTokenizer(str, " ");
String []str2Array = str020.split(" ");
//String[] tokens = str.split(" ");
String str01 = str2Array[0];
String str02 = str2Array[1];
String str03 = str2Array[2];
System.out.println(str01);
System.out.println(str02);
System.out.println(str03);
System.out.println();
String str1 = st.nextToken();
String str2 = st.nextToken();
String str3 = st.nextToken();
System.out.println(str1);
System.out.println(str2);
System.out.println(str3);
//1. 띄어쓰기 기준으로 문자열을 분리
StringTokenizer st = new StringTokenizer(문자열);
//2. 구분자를 기준으로 문자열을 분리
StringTokenizer st = new StringTokenizer(문자열, 구분자);
// 3. 구분자를 기준으로 문자열을 분리할 때 구분자도 토큰으로 넣는다. (true)
//구분자를 분리된 문자열 토큰에 포함 시키지 않는다. (false)
//(디폴트 : false)
//true : 'Java', ' ', 'Study', ' ', 'Start'
StringTokenizer st = new StringTokenizer(문자열 , 구분자 , true/false);
}
}
출력값
Java
Study
Hard
Java
Study
Start
출력
1. Printf
- %d 등과 같은 출력 서식을 사용하여 변수를 넣어 출력할 수 있다.
System.out.printf("데이터타입", Value);
기호 | 설명 |
%d | 정수 |
%f | 실수 |
%c | 문자 |
%s | 문자열 |
%b | 참, 거짓 |
2. Println
개행처리와 함께 출력한다.
3.Print
개행없이 출력한다.
728x90
반응형
'Backend > Java' 카테고리의 다른 글
[Java] Overloading / Overriding (2) | 2023.12.07 |
---|---|
[Backend/Java] BufferedReader를 사용할 때 IOException을 해주는 이유 (0) | 2023.08.17 |