๐Ÿต java

[JAVA] Scanner์™€ BufferReader ์ •๋ฆฌํ•ด๋ณด์ž

c0zi 2024. 1. 7. 18:26

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ์—ฐ์Šตํ•  ๋•Œ๋งˆ๋‹ค ์ž์ฃผ ๋ณด์ด๋Š” ๋ฌธ๋ฒ•๋“ค์ด ์žˆ๋‹ค.

 

๋ฐ”๋กœ ์ž…๋ ฅ์„ ๋ฐ›๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” Scanner์™€ BufferReader์ด๋‹ค.

 

์ด๋ฒˆ์— swea์—์„œ ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด์„œ Scanner๋ฅผ ์ด์šฉํ•ด ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด์•˜๋Š”๋ฐ, ๋‹ค๋ฅธ ๋ถ„๋“ค์˜ ํ’€์ด์˜ ๋ฉ”๋ชจ๋ฆฌ๋‚˜ ์‹œ๊ฐ„์ด ์ ์–ด์„œ ํ™•์ธํ•ด๋ณด์•˜๋”๋‹ˆ ๋Œ€๋ถ€๋ถ„ BufferReader๋ฅผ ์‚ฌ์šฉํ•˜์…จ๋‹ค.

 

๊ทธ๋ž˜์„œ ์•Œ์•„๋ณด๋‹ˆ BufferReader๊ฐ€ ์‹œ๊ฐ„์  ์ธก๋ฉด์—์„œ ํšจ์œจ์ ์ธ ๊ฒƒ ๊ฐ™์•˜๋‹ค. ์ž๋ฐ” ๋ฐฐ์šฐ๊ธฐ ์‹œ์ž‘ํ•œ์ง€๋Š” 1๋…„์ •๋„ ๋œ ๊ฒƒ ๊ฐ™์€๋ฐ ์•„์ง ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์—ฐ์Šต์„ ์•ˆํ–ˆ๋‹ค๋ณด๋‹ˆ ์ด๋Ÿฐ ๊ธฐ๋ณธ์ ์ธ ๊ฒƒ๋„ ์ง€์‹์ด ๋ถ€์กฑํ•œ ๊ฒƒ ๊ฐ™์•„ ๋ถ€๋„๋Ÿฝ์ง€๋งŒ ์ง€๊ธˆ๋ถ€ํ„ฐ ๊ณต๋ถ€ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

 

๋จผ์ € ์•„๋ž˜ ํ‘œ๋ฅผ ๋ณด์‹œ๋ฉด, Java์˜ Scanner์™€ BufferReader๋ฅผ ๋ณผ ๋•Œ ํ‰๊ท  ์†๋„๊ฐ€ ๋งŽ์ด ์ฐจ์ด๊ฐ€ ๋‚œ๋‹ค.

์ถœ์ฒ˜ : ๋ฐฑ์ค€ ์‚ฌ์ดํŠธ

 

์ด๋Ÿฌํ•œ ์†๋„์˜ ์ฐจ์ด๊ฐ€ ๋‚˜๋Š” ์ด์œ ์— ๋Œ€ํ•ด ๋‘๊ฐ€์ง€๋ฅผ ๋น„๊ตํ•ด๋ณด๋ฉด์„œ ์•Œ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค.

 

Scanner

Java์—์„œ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ž…๋ ฅ์„ ๋ฐ›์„ ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ํด๋ž˜์Šค๋กœ,์ž…๋ ฅ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์–‘ํ•œ ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. import java.util.Scanner;๋ฅผ ์‚ฌ์šฉํ•ด ์ž„ํฌํŠธ ํ•ด์ค€๋‹ค.

 

Scanner ์‚ฌ์šฉ๋ฒ•
import java.util.Scanner;

public class Input {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
    }
}

 

Scanner๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Scanner(System.in)๊ณผ ๊ฐ™์ด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ , nextLine()๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ž…๋ ฅ ๋ฐ์ดํ„ฐ ์ค‘ ํ•œ ์ค„์„ ์ฝ์–ด์˜จ๋‹ค.

 

์ด๋Ÿฌํ•œ Scanner๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

next()

: ๋‹ค์Œ ๊ณต๋ฐฑ์ด๋‚˜ ๊ฐœํ–‰ ๋ฌธ์ž๊นŒ์ง€์˜ ๋ฌธ์ž์—ด์„ ์ฝ์–ด์˜จ๋‹ค. ์ฆ‰, ์ฒซ ๋ฒˆ์งธ ๋‹จ์–ด๋ฅผ ์ฝ์–ด์˜จ๋‹ค.

Scanner scanner = new Scanner(System.in);
System.out.print("์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”: ");
String name = scanner.next();
System.out.println("์ž…๋ ฅํ•œ ์ด๋ฆ„: " + name);

 

next()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ๋‹ค์Œ์œผ๋กœ ์ฝ์–ด์˜ค๋Š” ๋‹จ์–ด์˜ ํ˜•์‹์„ ์ •ํ™•ํžˆ ์ง€์ •ํ•˜์ง€ ์•Š์•„๋„ ์ฒซ๋ฒˆ์งธ ๋‹จ์–ด๋ฅผ ์ฝ์–ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

 

nextInt(), nextDouble(), nextFloat()

: ๊ฐ๊ฐ ์ •์ˆ˜, double, float ํ˜•์‹์˜ ์ˆซ์ž๋ฅผ ์ฝ์–ด์˜จ๋‹ค.

Scanner scanner = new Scanner(System.in);
System.out.print("์ •์ˆ˜๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”: ");
int num = scanner.nextInt();
System.out.println("์ž…๋ ฅํ•œ ์ •์ˆ˜: " + num);

 

BufferReader์˜ ๊ฒฝ์šฐ๋Š” ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ ์ž…๋ ฅ์„ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ์›ํ•˜๋Š” ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š” ๋ฐ˜๋ฉด, next---()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ์›ํ•˜๋Š” ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

  

nextLine()

: ๊ฐœํ–‰ ๋ฌธ์ž ์ „๊นŒ์ง€์˜ ๋ชจ๋“  ๋ฌธ์ž์—ด, ์ฆ‰ ํ•œ ๋ผ์ธ ์ „์ฒด๋ฅผ ์ฝ์–ด์˜จ๋‹ค.

Scanner scanner = new Scanner(System.in);
System.out.print("์—ฌ๋Ÿฌ ์ค„์˜ ํ…์ŠคํŠธ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”: ");
String multilineText = scanner.nextLine();
System.out.println("์ž…๋ ฅํ•œ ํ…์ŠคํŠธ: " + multilineText);

 

๋‹จ์–ด๊ฐ€ ์•„๋‹Œ, ๋ฌธ์ž์—ด ํ•œ ์ค„์„์ฝ์–ด์˜ค๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค.   

 

hasNext(), hasNextInt()

: ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์— ๋‹ค์Œ ๊ฐ’์ด ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฉ”์„œ๋“œ๋‹ค.

Scanner scanner = new Scanner(System.in);
System.out.print("์ •์ˆ˜๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ: ");
boolean hasNextInt = scanner.hasNextInt();
if (hasNextInt) {
    int num = scanner.nextInt();
    System.out.println("์ž…๋ ฅํ•œ ์ •์ˆ˜: " + num);
} else {
    System.out.println("์ •์ˆ˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.");
}

 

์œ„์˜ ๋ฉ”์„œ๋“œ์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด scanner์˜ ๊ฒฝ์šฐ ๋น„๊ต์  ์‰ฝ๊ณ  ๊ฐ„ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ํ•˜์ง€๋งŒ, ๊ทธ๋งŒํผ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํฌ๊ณ  ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅ๋ฐ›์„ ๋•Œ ๋น„ํšจ์œจ์ ์ด๋ผ๋Š” ๊ฒƒ์„ ์œ„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋Ÿฌํ•œ scanner์˜ ๋‹จ์ ์„ ๋ณด์™„์‹œ์ผœ์ค„ ์ˆ˜ ์žˆ๋Š” BufferReader์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž.

 

BufferReader

Java์—์„œ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์œผ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฝ๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค๋‹ค. Scanner์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ์˜ ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ํŒŒ์ผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ๋•Œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋œ๋‹ค. java.io ํŒจํ‚ค์ง€์— ์†ํ•ด ์žˆ์œผ๋ฉฐ, InputStreamReader๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด์™€ ๊ด€๋ จ๋œ import๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

 

BufferReader ์‚ฌ์šฉ๋ฒ•
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

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

        System.out.print("ํ•œ ์ค„์„ ์ž…๋ ฅํ•˜์„ธ์š”: ");
        String inputLine = reader.readLine();
        System.out.println("์ž…๋ ฅํ•œ ๋ผ์ธ: " + inputLine);

        // BufferedReader๋ฅผ ๋‹ซ์ง€ ์•Š์•„๋„ ๋˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ƒ๋žต ๊ฐ€๋Šฅ
    }
}

 

๋จผ์ €, InpurtStreamReader๋ฅผ์‚ฌ์šฉํ•ด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด์ค€๋‹ค.  ๊ทธ ํ›„ readLine ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฌธ์ž์—ด์„ ์ฝ์–ด์˜จ๋‹ค. ์ด์™€ ๊ด€๋ จ๋œ bufferReader์˜ ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด ๋” ์•Œ์•„๋ณด์ž.

 

read()

: ํ•œ ๋ฌธ์ž์”ฉ ์ฝ์–ด๋“ค์ด๊ณ , ๋” ์ด์ƒ ์ฝ์„ ๋ฌธ์ž๊ฐ€ ์—†์œผ๋ฉด -1์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("ํ•œ ๋ฌธ์ž๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”: ");
int charCode = reader.read();
char inputChar = (char) charCode;
System.out.println("์ž…๋ ฅํ•œ ๋ฌธ์ž: " + inputChar);

 

readLine()

: ๊ฐœํ–‰ ๋ฌธ์ž๊นŒ์ง€์˜ ๋ชจ๋“  ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("ํ•œ ์ค„์„ ์ž…๋ ฅํ•˜์„ธ์š”: ");
String inputLine = reader.readLine();
System.out.println("์ž…๋ ฅํ•œ ๋ผ์ธ: " + inputLine);

 

ready()

: ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์—์„œ ์ฝ์„ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•œ๋‹ค.

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
if (reader.ready()) {
    System.out.println("๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.");
} else {
    System.out.println("๋ฐ์ดํ„ฐ๊ฐ€ ์•„์ง ์—†์Šต๋‹ˆ๋‹ค.");
}

 

close()

: ์ž์›์„ ํ•ด์ œํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋ฉฐ, BufferedReader๋ฅผ ๋‹ซ๋Š”๋‹ค.

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
// ์ž‘์—… ์ˆ˜ํ–‰
reader.close();

 

BufferReader์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ

 

Split, StringTokenizer

  • split์˜ ๊ฒฝ์šฐ ์ •๊ทœ์‹์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฌธ์ž์—ด์„ ์ž๋ฅด๋Š” ๋ฐ˜๋ฉด StringTokenizer์˜ nextToken()๋ฉ”์†Œ๋“œ๋Š” ๋‹จ์ˆœํžˆ ๊ณต๋ฐฑ ์ž๋ฆฌ๋ฅผ ๋•ก๊ฒจ ์ฑ„์šฐ๋Š” ๊ฒƒ์ด๋‹ค.
  • ์ •๊ทœ์‹์ด๋‚˜ ์ธ๋ฑ์Šค ์ ‘๊ทผ ๊ฐ™์€ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”์—†๋‹ค๋ฉด StringTokenizer๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํšจ์œจ์ ์ด๋‹ค.

 

์ด์™€ ๊ด€๋ จํ•ด ๋‘๊ฐ€์ง€ ๋ฉ”์„œ๋“œ์˜ ์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•ด ๊ฐ„๋‹จํžˆ ์•Œ์•„๋ณด์ž.

 

Split : ๊ณต๋ฐฑ ๋ฌธ์ž ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด ์ž๋ฅด๊ธฐ

BufferedReader br = new BufferedReader(new InputStreamReader(System.in);
String[] str = br.readLine().split(" ");
int n1 = Integer.parseInt(str[0]); // ๋ฌธ์ž์—ด -> ์ •์ˆ˜ ๋ณ€ํ™˜
int n2 = Integer.parseInt(str[1]);

 

 

StringTokenizer : ๊ณต๋ฐฑ ๋ฌธ์ž ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด ์ž๋ฅด๊ธฐ

BufferedReader br = new BufferedReader(new InputStreamReader(System.in);
StringTokenizer st = new StringTokenizer(br.readLine());

String str = st.nextToken(); // ๋‹ค์Œ ํ† ํฐ(๋ฌธ์ž์—ด) ๋ฐ›๊ธฐ
int n = Integer.parseInt(st.nextToken()); // ๋‹ค์Œ ๋ฌธ์ž์—ด ๋ฐ›๊ณ  ์ •์ˆ˜๋กœ ๋ณ€ํ™˜