[JAVA]입출력 메서드

2025. 1. 14. 14:58·Language/JAVA

백준에서 문제를 푸는데 System.out.println(), Scanner가 너무 느려서 글을 작성하게 되었다(┬┬﹏┬┬)

BufferedReader

사용 상황

대량의 문자열 입력을 빠르게 처리해야 할 때 유용하다.

주요 메서드

read(): 입력 스트림에서 한 번에 하나의 문자를 읽는다. 읽은 문자의 유니코드 값을 int 타입으로 반환하고 더 이상 읽을 문자가 없으면 -1을 반환한다.
readLine(): 입력 스트림에서 한 줄의 문자열을 읽어 반환한다. 읽은 문자열을 반환하고 더 이상 읽을 줄이 없으면 null을 반환한다.
skip(long n): 입력 스트림에서 n개의 문자를 건너뛴다. 실제로 건너뛴 문자의 수를 반환하고 n보다 적은 수의 문자를 건너뛴 경우, 건너뛴 문자의 수를 반환한다.
mark(int readAheadLimit): 현재 위치를 마크한다. readAheadLimit는 마크된 위치에서 읽을 수 있는 최대 문자 수를 지정한다.
reset(): 마크된 위치로 스트림을 되돌린다.
close(): 스트림을 닫는다. 

사용 예시

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class BufferedReaderExample {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("문자열을 입력하세요: ");
        String input = reader.readLine();
        System.out.println("입력한 문자열: " + input);
        reader.close();
    }
}

문자열을 다른 데이터 형식으로 변환

readLine()을 사용하는 경우 사용자가 입력한 데이터는 항상 String 형식으로 반환된다. 따라서, 만약 사용자가 입력한 값을 다른 데이터 형식으로 사용하고 싶다면, 형 변환을 수행해야 한다. 아래는 형 변환을 포함한 예시 코드이다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class BufferedReaderExample {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("정수를 입력하세요: ");
        String input = reader.readLine();
        int number = Integer.parseInt(input);
        System.out.println("입력한 정수: " + number);
        reader.close();
    }
}

BufferedWriter

사용 상황

대량의 문자열 출력을 빠르게 처리해야 할 때 사용된다.

주요 메서드

write(String str): 문자열을 출력한다.
write(char[] cbuf, int off, int len): 문자 배열의 일부를 출력한다.
newLine(): 줄 바꿈을 추가한다.
flush(): 버퍼의 내용을 강제로 출력한다.
close(): 스트림을 닫는다.

사용 예시

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class BufferedWriterExample {
    public static void main(String[] args) throws IOException {
        BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"));
        writer.write("👻");
        writer.newLine();
        writer.write("👽");
        writer.flush();
        writer.close();
    }
}

StringTokenizer

사용 상황

문자열을 특정 구분자를 기준으로 분리해야 할 때 사용된다.

주요 메서드

StringTokenizer(String str): 주어진 문자열을 공백을 기준으로 토큰으로 분리한다.
StringTokenizer(String str, String delim): 주어진 구분자를 사용하여 문자열을 토큰으로 분리한다.
hasMoreTokens(): 더 많은 토큰이 있는지 확인한다.
nextToken(): 다음 토큰을 반환한다.
countTokens(): 남아 있는 토큰의 수를 반환한다.

사용 예시

import java.util.StringTokenizer;

public class StringTokenizerExample {
    public static void main(String[] args) {
        String str = "💩,👽,👻";
        StringTokenizer tokenizer = new StringTokenizer(str, ",");

        while (tokenizer.hasMoreTokens()) {
            System.out.println(tokenizer.nextToken());
        }
    }
}

StringBuilder

사용 상황

여러 개의 문자열을 자주 수정, 추가, 삭제해야 할 때 StringBuilder를 사용하면 성능이 향상된다.

주요 메서드

append(String str): 문자열을 추가한다.
append(char c): 문자를 추가한다.
insert(int offset, String str): 지정한 위치에 문자열을 삽입한다.
delete(int start, int end): 지정한 범위의 문자열을 삭제한다.
reverse(): 문자열을 반전시킨다.
toString(): 객체를 출력할 때 자동으로 호출되는 메서드로 최종 문자열을 반환한다.
capacity(): 현재의 용량을 반환한다.
length(): 현재 문자열의 길이를 반환한다.

사용 예시

public class StringBuilderExample {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        sb.append("Hello");
        sb.append(", ");
        sb.append("World!");
        
        System.out.println(sb.toString()); //Hello, World!
    }
}

Scanner

그래도 Scanner 사용법은 알아야 할 것 같아서 Scanner도 정리한다=.=

사용 상황

사용자로부터 입력을 받을 때 유용하며, 다양한 데이터 타입을 쉽게 읽어올 수 있다.

주요 메서드

next(): 공백을 기준으로 다음 단어를 읽어온다. 즉, 입력된 문자열에서 첫 번째 공백까지의 부분만 반환한다.
nextLine(): 한 줄 전체를 읽어온다. 사용자가 입력한 내용이 줄 바꿈 문자(\n)에 도달할 때까지의 모든 문자열을 반환한다.
nextInt(): 입력 스트림에서 정수를 읽어 반환한다.
nextDouble(): 입력 스트림에서 실수를 읽어 반환한다.
hasNext(): 입력 스트림에 다음 토큰이 있는지 확인한다.
hasNextInt(): 입력 스트림에 다음 토큰이 정수인지 확인한다.
hasNextDouble(): 입력 스트림에 다음 토큰이 실수인지 확인한다.
close(): 스트림을 닫는다.

사용 예시

import java.util.Scanner;
public class ScannerExample {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        System.out.print("정수를 입력하세요: ");
        int number = scanner.nextInt();
        System.out.println("입력한 정수: " + number);
    
        scanner.nextLine(); //버퍼 비우기
        
        System.out.print("문자열을 입력하세요: ");
        String text = scanner.nextLine();
        System.out.println("입력한 문자열: " + text);
        
        scanner.close();
    }
}

문자열을 다른 데이터 형식으로 변환

Scanner는 BufferedReader와 다르게 쉽게 nextInt(), nextDouble() 메서드를 사용하여 입력된 문자열을 직접 해당 데이터 타입으로 변환할 수 있다. 예를 들어, nextInt()를 사용하면 입력된 정수를 바로 int 타입으로 받을 수 있다. 하지만 성능이 느리다는 단점이 있다.

버퍼를 비우는 이유와 방법

nextInt() 또는 nextDouble() 메서드를 호출한 후에는 입력 버퍼에 줄 바꿈 문자가 남아 있게 된다. 이로 인해 다음에nextLine()을 호출하면 남아 있는 줄 바꿈 문자를 읽게 되어 빈 문자열이 반환된다. 따라서, nextLine()을 한 번 더 호출하여 입력 버퍼를 비워야 한다. 이렇게 하면 줄 바꿈 문자를 소비하고, 이후에 사용자가 입력한 문자열을 정상적으로 읽을 수 있다.

'Language > JAVA' 카테고리의 다른 글

[JAVA]내부 반복자 vs 외부 반복자  (0) 2025.02.05
[JAVA]String 클래스 메소드  (0) 2025.01.20
[JAVA]정규 표현식  (0) 2025.01.14
[JAVA]Stack, Queue 컬렉션(Collection)  (2) 2024.12.25
[JAVA]List, Set, Map 컬렉션(Collection)  (2) 2024.11.24
'Language/JAVA' 카테고리의 다른 글
  • [JAVA]내부 반복자 vs 외부 반복자
  • [JAVA]String 클래스 메소드
  • [JAVA]정규 표현식
  • [JAVA]Stack, Queue 컬렉션(Collection)
yxxjxxeee
yxxjxxeee
  • yxxjxxeee
    공부 일지
    yxxjxxeee
  • 전체
    오늘
    어제
    • study N
      • Framework
        • Spring
      • Language
        • JavaScript
        • C | C++
        • JAVA
        • PHP
      • CS
        • 네트워크
        • 자료구조
        • 데이터베이스
        • 운영체제
      • DBMS
        • MySQL
      • 코딩테스트 N
        • 백준 N
        • 프로그래머스
        • LeetCode
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 쇼핑몰 제작 프로젝트(PHP)
    • github
  • 공지사항

  • 인기 글

  • 최근 글

  • hELLO Designed By 정상우
    Version v4.10.2
yxxjxxeee
[JAVA]입출력 메서드
상단으로

티스토리툴바