열정 실천

[JAVA] StringReader, StringTokenizer, StringBuilder 자바로 알고리즘 문제 풀려면 이거는 기본! 본문

개발 공부/JAVA

[JAVA] StringReader, StringTokenizer, StringBuilder 자바로 알고리즘 문제 풀려면 이거는 기본!

구운오니 2024. 3. 8. 14:41

 

입력 받기 _  1 Scanner 
import java.util.Scanner;                          //01. import

public class Main{
	public static void main(String args[]){
    
    	Scaanner sc = new Scanner(System.in);      //02. Scanner 객체 생성
        
        String str = sc.nextLine();                //03. 문자열 입력받기
        int num = sc.nextInt();                    //03. integer형 입력받기
        
        sc.close();                                //04. 닫기 (의도치않은 입력 방지)
    }
}

 

 

입력 받기 _ 2 BufferedReader 
import java.io.BufferedReader;                  //01-1. BufferedReader import
import java.io.InputStreamReader;               //01-2. InputStreamReader import
import java.io.IOExection;                      //01-3. InputStreamReader import

public class Main{
	public static void main(String args[]) throws IOException {      //02. throws IOExection(예외처리)
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  //03. BufferedReader 객체 생성
        
		String str = br.readLine();                        //04. 문자열 입력받기 
		int num = Integer.ParseInt(br.readLine());         //04. Integer형 입력받기
	}   
}

 

BufferdReader는 Scanner를 사용할 때보다 조금 더 코드가 많다. 

import도 3개나 해줘야하고 (보통 코드치면 알아서 import 되긴함)

예외처리에 객체 생성 코드도 길다! 하지만 BufferedReader 사용을 권장한다.

 

왜냐?!

 

BufferedReader를 사용하는 이유

 

버퍼(buffer)는 데이터를 한 곳에서 다른 곳으로 전송하는 동안 일시적으로 데이터를 보관하는 임시메모리 영역이다. 

위에서 봤던 Scanner는 버퍼를 사용하지 않고 키보드의 입력이 이루어지는 순간 바로 전송된다. 하지만 Buffer를 사용하는 BufferedReader는 버퍼가 가득 차거나, 개행문자가 나타나면, 버퍼의 내용을 한 번에 전송하기 때문에 입출력 속도가 향상된다. 

 

 

 

BufferedReader는 문자열로만 입력을 받는다. 때문에 다른 형으로 입력을 받고싶을 땐 

int a = Integer.ParseInt(br.readLine());  << 이렇게 형변환을 해줘야한다!

 

 

 

 

 

문자열 구분 _ StringTokenizer

 

 

그 다음으로 가장 자주 쓰이는 StringTokenizer이다.

3 14  >> 이렇게 띄어쓰기로 두 문자를 구분할 때  

010-1234-8646 >> 특정 구분자를 기준으로 구분할 때 사용한다. 

import java.util.StringTokenizer;

public class Main {
    public static void main(String args[]) throws IOException {

		StringTokenizer st = new StringTokenizer(안녕-하세-요,"-"); // 매개변수1 : 문자열 / 매개변수2 : 구분자 
		String str1 = st.nextToken();     // str1 : 안녕
 		String str2 = st.nextToken();     // str2 : 하세
		String str3 = st.nextToken();     // str3 : 요
    }
}

 

StringTokenizer st = new StringTokenizer(안녕-하세-요,"-");
첫 번째 매개변수에는 문자열두 번째 매개변수에는 문자열을 토큰으로 구분할 구분자를 넣어주면 된다. 

그리고 nextToken을 이용하면 구분한 토큰을 순서대로 받아올 수 있다. 

 

만약 구분자가 띄어쓰기라면 2번 째 매개변수는 생략하고 

StringTokenizer st = new StringTokenizer(문자열);  << 이렇게 하면 된다. 

 

 

 

문자열 저장 _ StringBuilder

 

특정 상황마다 문자열 또는 숫자를 기억하고 있다가 마지막에 한 번에 출력하고 싶을 때!!!!

publid class Main {

	public static void main(String args[]) {
    
    	StringBuilder sb = new StringBuilder();
        
        sb.append("hi ");
        sb.append(2024);
        sb.append("\n"+3);
        
        System.out.println(sb);
    }
}

 

 

StringBuilder 객체 선언 후

필요할 때마다 append 함수를 이용하여 문자열을 계속 넣어주고

출력하고 싶을 때 출력해주면 끝!