[CodeUp] 입-출력 1018 ~ 1022 Scanner vs BufferedReader 차이

2
post-thumbnail

CodeUp Algorithm 1018 ~ 1022


어떤 형식에 맞추어 시간이 입력될 때, 그대로 출력하는 연습을 해보자.
시간: 분

import java.util.Scanner;

public class c1018_1 {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in); // Scanner 객체 생성
		//System.print("시간 입력 : ");
		String clock = scan.nextLine(); // 한 줄을 입력받음
		String[] arr = clock.split(":"); // ":"을 기준으로 문자열을 구분
		System.out.printf("%s:%s", arr[0], arr[1]); // 분할 문자열을 출력
		scan.close(); // 입력 종료후 스캐너 닫아주기
	}
}

// 시간 입력이 hh:mm 의 형식으로 입력
// split() 메소드를 통해 ':'을 구분하여 arr[0]에는 시, arr[1]에는 분이 저장됨
// 객체 다 사용하면 닫아주기

년, 월, 일을 입력받아 지정된 형식으로 출력하는 연습을 해보자.
입력받은 연, 월, 일을 yyyy.mm.dd 형식으로 출력한다.
(%02d를 사용하면 2칸을 사용해 출력하는데, 한 자리 수인 경우 앞에 0을 붙여 출력한다.)

import java.util.Scanner;

public class c1019 {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in); // Scanner 객체 생성
		//System.print("연월 입력 : ");
		String clock = scan.nextLine(); // 한 줄을 입력받음
		String[] arr = clock.split("\\."); // split를 쓸 때 뭔가 작동을 안 하면 \\을 붙여 보는 방법 추천.

        int[] arr2 = new int[arr.length]; // 문자열의 길이만큼 정수 배열 선언

        for(int i= 0; i < arr.length; i++){
            arr2[i] = Integer.parseInt(arr[i]);
        }
		System.out.printf("%04d.%02d.%02d", arr2[0], arr2[1], arr2[2]); // 분할 문자열을 출력
		scan.close(); // 입력 종료후 스캐너 닫아주기
	}
}

// 입력 클래스인 Scanner 객체 생성
// 날짜 입력이 yyyy:mm:dd 형식으로 '.' 구분되어 입력된다.
// split() 메소드를 통해 '.'을 구분하여 String[], 문자열 배열에 각각 저장 (문자열의 길이 : 3)
// 나눠진 문자열의 길이에 맞춰 int[], 정수 배열 arr2 생성 (값이 아직 저장되지 않음)
// for문을 통해 arr의 길이(3)에 맞춰 반복하여 문자열을 정수형태로 parsing하여 arr2의 배열에 저장한다.
// -> i=0, arr[0]의 값이 parsing 후 arr2[0]에 저장
// -> i=1, arr[1]의 값이 parsing 후 arr2[1]에 저장 
// -> i=2, arr[2]의 값이 parsing 후 arr2[2]에 저장
// 반복문 종료
// Scanner 객체를 이용한 입력이 종료되었으므로 객체 닫기

주민번호는 다음과 같이 구성된다.
XXXXXX-XXXXXXX
앞의 6자리는 생년월일(yymmdd)이고 뒤 7자리는 성별, 지역, 오류검출코드이다.
주민번호 앞 6자리와 뒷 7자리가 '-'로 구분되어 입력된다.
(입력값은 가상의 주민번호이다.)
ex)110011-0000000

import java.util.Scanner;

public class c1020 {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in); // Scanner 객체 생성
		System.out.print("주민번호 입력 : ");
		String num = scan.nextLine(); // 한 줄을 입력받음
		String[] arr = num.split("-");

        for(String a : arr){
            System.out.print(a);
        }
		//System.out.printf(arr[0]+arr[1]); 
		scan.close(); // 입력 종료후 스캐너 닫아주기
	}
}

// 입력 클래스인 Scanner 객체 생성
// 123456-1234567 형식으로 '-' 구분되어 입력된다.
// split() 메소드를 통해 '-'을 구분하여 String[], 문자열 배열에 각각 저장 
// EnhancedLoop for문을 이용하여 arr의 값을 a에 하나씩 저장하고 a를 출력한다.
// -> arr에 값이 없을 때까지 for문이 반복된다.
// -> 배열에 저장되어있는 데이터 타입과 데이터를 받을 변수의 타입이 같아야한다.
// Scanner 객체를 이용한 입력이 종료되었으므로 객체 닫기

1개의 단어를 입력받아 그대로 출력해보자.

import java.util.Scanner;

public class c1021 {
    public static void main(String[] args){
    Scanner sc = new Scanner(System.in);
    String word = sc.next();
    System.out.println(word);
    sc.close();
    }
}

공백 문자가 포함되어 있는 문장을 입력받고 그대로 출력하는 연습을 해보자.
Scanner vs BufferedReader 차이

import java.io.*;

public class c1022 {
    public static void main(String[] args) throws Exception {
        // BufferedReader와 BufferedWriter를 사용하기 위해 예외처리 (throws Exception)

        // 입력 클래스인 BufferedReader 객체 생성 (br)
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.print("한 문장 입력: ");
        String str = br.readLine(); // 한 문장입력

        // 출력 클래스인 BuffrerdWriter 객체 생성 (br)
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        bw.write(str+"\n"); // 입력받은 str 값을 받는다
        bw.flush(); // 버퍼에 있는 값들 전부 출력
        bw.close(); // 출력 종료 후 BufferedWriter 닫기

    } // end c1022()
} // end c1022

// [Scanner] VS [BufferedReader] 차이점
// - 입력 데이터로 Scanner는 모든 데이터, BufferedReader는 String만 읽을 수 있다.
// - 버퍼의 크기, Scanner(1KB) > BufferedReader(8KB)
// - 처리 속도, Scanner < BufferdReader
// - Scanner 띄어쓰기는 Enter로 구분, BufferedReader Enter로만 구분
// 1. BufferedReader를 사용하기위해서는 try-catch 구문 또는 throws Exception을 써줘야 한다.
// 2. 입력 클래스 BufferedReader 객체 생성
// 3. 한 문장을 입력받음
// 4. 출력 클래스 BufferedWriter 객체 생성
// 5. bw에 write()메소드로 입력받은 str을 받아온다. ("\n" 사용한 이유는 BufferedReader는 개행기능 포함하지 않는다.)
// 6. 받아온 str을 flush() 메소드를 통해 전부 출력
// 7. BufferedWriter 객체를 이용한 출력이 종료되었으므로 객체 닫기
profile
ᴅᴇ́ᴠᴇʟᴏᴘᴘᴇᴜʀ. ᴘʀᴏɢʀᴀᴍᴍᴀᴛɪᴏɴ 🔥

1개의 댓글

comment-user-thumbnail
2021년 4월 12일

올 멋진뎅~~

답글 달기