Java - 입출력

2019년 04월 24일

자바의 출력

  • System.out.println(), System.out.print()

    • 출력할 데이터를 한 개만 전달 가능하다.
    • 전달할 수 있는 데이터타입에 제한이 거의 없다.
    • 숫자는 십진수만 출력한다. 실수를 출력할 시에는 일정한 위치에서 자른다. printf는 이와 같은 단점을 보완한다.
  • System.out.printf()

    • 일반문자 및 포맷문자를 작성할 수 있다.
    • 포맷문자의 형식은 % + 정해진 문자 이다.
    • %d // 십진수 출력. %,d는 숫자의 천단위마다 콤마를 찍어준다.
    • %s // 문자열 출력. %10s 는 10자리 문자열을 만든다. 입력한 문자열이 10자리보다 짧을 경우 블랭크로 채운다. 기본적으로 우정렬이고 좌정렬하고 싶으면 %-10s라고 쓰면 된다.
    • %c // 문자 출력
    • %f // 소수점 출력. %.3f => 소수점 이하 3번째자리까지 출력.

자바 입력 클래스

  • Scanner

    import java.util.Scanner; // import해오지 않으면 에러가 난다.
    
    public class Main{
    	public static void main(String args[]){
    		Scanner sc = new Scanner(System.in);
    		int a, b;
    		a = sc.nextInt();
    		b = sc.nextInt();
    		System.out.println(a + b);
    	}
    }
  • BufferedReader

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String[] s = br.readLine().split(" ");
    
    // s[0] = "1"; Integer.parseInt(s[0]) => 1
  • StringTokenizer

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

EOF(End of File)

주어지는 입력을 그대로 출력하기

  • Scanner

    Scanner sc = new Scanner(System.in);
    
    while(sc.hasNextLine()) {
      System.out.printlin(sc.nextLine());
    }
    
    while(sc.hasNextInt()) {
      System.out.println(sc.nextInt());
    }
  • BufferedReader

    BufferdReader br = new BufferedReader(new InputStreamReader(System.in));
    String input = "";
    
    while((input = br.readLine()) != null) { // String input에 대입하는 것은 입력받은 줄을 읽겠다는 의미.
      // ...
    }

    위 코드를 실행시키려고 했을 때 예외처리에 대한 오류가 떠서 예외처리를 위한 코드를 넣었다.

    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.IOException;
    
    public class Main{
    	public static void main(String args[]){
          try(BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
              String input = "";
    
              while((input = br.readLine()) != null) {
                  System.out.println(input);
              }
          } catch(IOException e) {
              System.err.format("IOException: %s%n", e);
          }
    	}
    }

    +) 문제 추가

    3 // 첫번째줄 인풋은 주어질 숫자의 개수
    123 // 두번째줄 인풋은 숫자들 -> 이 숫자들을 전부 더한 수를 출력하시오
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.IOException;
    
    public class Main {
    
    	public static void main(String[] args) {
          try(BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
              String n = br.readLine();
              String[] s = br.readLine().split("");
              int sum = 0;
    
              for(int i = 0 ; i < s.length ; i++ ) {
    				sum += Integer.parseInt(s[i]);
    			}
              System.out.println(sum);
          } catch(IOException e) {
              System.err.format("IOException: %s%n", e);
          }
    	}
    }

+) StringTokenizer는 문자열을 입력하는 것이 아니라 가공하는 역할을 하기 때문에 EOF 처리에는 맞지 않는다고 한다.