입출력

Last updated - 2024년 10월 21일 Edit Source


    # Scanner

    Scanner가 느리기는 하지만, 시간 절약상 좋긴 함

    • 공백, 줄바꿈 (\n)을 단위로 끊어짐
    • import java.util.Scanner;
    • Scanner sc = new Scanner(System.in);
    • sc.메서드 방식으로 사용
    1
    2
    3
    4
    5
    6
    7
    
    import java.util.Scanner;
    
    public class Main {
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    	}
    }
    

    # 정수, 실수

    • sc.nextInt() : 정수
    • sc.nextDouble() : 실수
    • 소숫점 출력할 때 printf 말고 String.format("%.2f", ㅁ); 형태도 가능
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
    import java.util.Scanner;
    
    public class Main {
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    
    		int a = sc.nextInt();
    		int b = sc.nextInt();
    		double c = sc.nextDouble();
    
    		System.out.printf("%d %d %.2f", a, b, c);
    		System.out.print(String.format("%d %d %.2f", a, b, c));
    	}
    }
    
    // 입력
    // 1 2
    // 3.4772
    
    // 출력
    // 1 2 3.48
    

    # 문자열, 문자

    • sc.next() : space나 new line으로 문자열 구분
    • sc.nextLine() : new line으로만 문자열 구분 (공백 포함하여 길이 계산됨)
    • sc.next().charAt(0) : 한 줄 전체 문자열에서 첫 번째 문자
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
    import java.util.Scanner;
    
    public class Main {
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    
    		String s = sc.next();
    		char c = sc.next().charAt(0);
    
    		System.out.println(s);
    		System.out.println(c);
    	}
    }
    
    // 입력
    // hello
    // jaeyoon
    
    // 출력
    // hello
    // j
    

    # 구분자

    • sc.useDelimiter(특정문자) : 구분자로 잘라서 받기
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    import java.util.Scanner;
    
    public class Main {
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		sc.useDelimiter(":");
    
    		int hour = sc.nextInt();
    		int minutes = sc.nextInt();
    
    		System.out.println("현재 시각은 " + hour + "시 " + minutes + "분");
    	}
    }
    
    // 입력
    // 15:47
    
    // 출력
    // 현재 시각은 15시 47분
    

    • useDelimiter 안의 값은 정규 표현식을 이용
    • 따라서, ., $ 등과 같은 특수 기호는 의도했던 바와 다르게 작용
    • 예를 들어, 정규표현식에서 .은 모든 문자를 의미하기에, 점을 나타내고 싶으면 \.이라고 써야한다.
      • 자바에서는 역슬래쉬를 나타내기 위해 \를 써야하므로, 최종적으로 \\. 라고 작성해야함
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    import java.util.Scanner;
    
    public class Main {
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		sc.useDelimiter(".");
    	}
    }
    
    // 런타임 에러
    
    public class Main {
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		sc.useDelimiter("\\.");
    	}
    }
    
    // 정상 작동
    



    # BufferedReader

    백준은 입출력 관련해서 웬만하면 기본으로 깔고 할 것

    1. import java.util.*;
      • 컬렉션, StringTokenizer 등
    2. import java.io.*;, main 메서드 뒤에 throws IOException
      • 버퍼리더 입출력 때문에
    3. Scanner느리니까 쓰지말고 BufferedReader 사용
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    
    import java.io.*;  
    import java.util.*;  
      
    public class Main {  
        public static void main(String[] args) throws IOException {  
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  
            StringTokenizer st = new StringTokenizer(br.readLine());  
            System.out.println(Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken()));  
        }  
    }
    

    # StringBuilder

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    
    import java.lang.StringBuilder;
    
    public class Main {
    	public static void main(String[] args) {
    		StringBuilder sb = new StringBuilder();
    
    		sb.append("hi")
    			.append("\n");
    
    		System.out.print(sb.toString());
    	}
    }
    
    • append로 붙여 나가기
    • 새로운 StringBuilder 객체 생성 안하고 초기화 하고 싶으면 sb.setLength(0)로 문자열 비워주기

    Comment