본문 바로가기

이론/Java

Java) 입출력/ 더 빠른 입출력

728x90
반응형
  1. nextint(): int 값을 입력 받을 때 사용함.
    • Scanner scanner = new Scanner(System.in);
    • int N = scanner.nextInt();
  2. (char)System.in.read: char를 입력 받을 때 사용함.
    • char ch;
    • ch = (char)Ststem.in.read();
    • 여러 줄로 입력 받을 경우 \n이 인식이 된다.
  3. nextLine(): char를 여러개 입력 받을 때 사용함.
    • char , b;
    • string str;
    • Scanner scanner = new Scanner(System.in)
    • str = scanner.nextLine();
    • a = str.charAt(0);
    • b = str.charAt(2);

Scanner 클래스의 next()와 nextLine() 메서드는 모두 사용자의 입력을 받지만, 차이점이 있다.

next(): 공백, 탭, 개행문자 등을 기준으로 하나의 토큰(token)를 읽습니다. 즉, 사용자가 여러 단어를 한 줄에 입력하면 각 단어를 따로따로 읽음.
nextLine(): 개행문자(엔터)가 나올 때까지 전체 라인을 하나의 문자열로 읽음. 이 메서드는 공백이 포함된 문장도 하나의 문자열로 인식함.


빠르게 입출력 하기

1. BufferedReader(): 버퍼를 사용하여 효율적으로 읽음, InputStreamReader: 문자 기반 스트림으로 변환

  • BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  • int n = Integer.parseInt(br.readlone());
  • char cr = (char)br.read();
  • String str = br.readLine();
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        // String 타입 입력 받기
        System.out.print("Enter a string: ");
        String str = br.readLine();
        System.out.println("You entered string: " + str);

        // int 타입 입력 받기
        System.out.print("Enter an integer: ");
        int num = Integer.parseInt(br.readLine());
        System.out.println("You entered integer: " + num);

        // char 타입 입력 받기
        System.out.print("Enter a character: ");
        
	// readLine() 메서드를 사용하여 문자열을 읽어들인 후, 이 문자열의 첫 번째 글자를 가져옵니다.
	char ch = br.readLine().charAt(0);
	
	System.out.println("You entered character: " + ch);
    }
}

 

2. String에 대한 split() 대신 StringTokenizer을 사용한다.

import java.io.*;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        System.out.println("Enter a line with multiple words:");
        String line = br.readLine();

        StringTokenizer st = new StringTokenizer(line, " "); // 공백을 기준으로 문자열 분리

        while (st.hasMoreTokens()) { // 토큰이 있을 경우 계속 반복
            String word = st.nextToken(); // 토큰(단어) 가져오기
            System.out.println(word);
        }
    }
}

 

3. BufferedWriter (더 빠른 출력)

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        String str = "Hello, world!";
        int num = 12345;
        char ch = 'A';

        // String 타입 출력
        bw.write(str);
        bw.newLine(); // 줄바꿈

        // int 타입 출력 - 숫자를 문자열로 변환하여 출력해야 함
	bw.write(Integer.toString(num));
	bw.newLine(); // 줄바꿈

	// char 타입 출력 - 문자도 문자열로 변환하여 출력해야 함
	bw.write(Character.toString(ch));
	bw.newLine(); // 줄바꿈

	// 반드시 flush()나 close() 호출해서 버퍼를 비워주어야 합니다.
	// 그렇지 않으면 버퍼에 남아있는 데이터가 완전히 쓰여지지 않을 수 있습니다.
	bw.flush();
    }
}

 

4. 총정리

import java.io.*;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        // String 타입 입력 받기
        System.out.print("Enter a string: ");
        String str = br.readLine();
        
	// StringTokenizer를 이용해 공백으로 분리된 단어들을 분리합니다.
	StringTokenizer st = new StringTokenizer(str, " ");
	while(st.hasMoreTokens()) {
	    bw.write(st.nextToken());
	    bw.newLine();
	}

        // int 타입 입력 받기
        System.out.print("Enter an integer: ");
        int num = Integer.parseInt(br.readLine());
        
	// BufferedWriter를 이용해 정수형 데이터를 출력합니다.
	bw.write(Integer.toString(num));
	bw.newLine();

	// char 타입 입력 받기
	System.out.print("Enter a character: ");
	char ch = br.readLine().charAt(0);
	
	// BufferedWriter를 이용해 문자형 데이터를 출력합니다.
	bw.write(Character.toString(ch));
	bw.newLine();

	bw.flush();
    }
}
728x90
반응형

'이론 > Java' 카테고리의 다른 글

OOP) 클래스와 객체  (0) 2024.01.02
Java) 변수와 데이터 타입, 연산자  (0) 2023.12.27
Java) 데이터 타입, pirnt(), println(), printf()  (0) 2023.08.29
Java) this()  (0) 2023.08.11
Java, BigDecimal  (1) 2023.08.11