반응형

입력값 처리

python에서 sys 가 있다면 java에서는 import java.util.Scanner 가 있다.
이때 Scanncer는 InputStream을 생성자로 입력받는데, 입력하는 곳이 어디냐에 따라 그 값을 넣어주면 된다.

[1] 입력 방식의 차이

1-1) 키보드에서 입력받기 : System.in

키보드에서의 입력을 받으려면 System.in의 InputStream 을 넘겨주면 된다.

import java.util.Scanner

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

1-2) 변수에서 입력받기 : 변수명

키보드에서의 입력을 받으려면 System.in의 InputStream 을 넘겨주면 된다.

import java.util.Scanner

public class Main {
    public static void main(String[] args) {
        String ex = "2 apple";
        Scanner sc = new Scanner(ex);
    }
}

1-3) 외부 파일에서 입력받기 : new File()

import java.util.Scanner

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(new File({파일명}));
    }
}

2) 타입에 따라 입력받기

파이썬 처럼 입력받을때 타입을 지정할 수 있다.

import java.util.Scanner

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // int 형으로 입력받기 : Short(), Long(), Double(), Float() 도 가능하다.
        int input_int = sc.nextInt();

        // 문자로 입력받기
        String input_str = sc.next();
        // 문자를 '줄' 단위로 입력받기
        String input_str = sc.nextLine();
    }
}

이때 next()nextInt() 는 모두 기본적으로 공백을 구분자 로 하여 한개 단어씩만 입력받는다.


public class Main {
    public static void main(String[] args) {
        String ex = "2 apple";
        Scanner sc = new Scanner(ex);

        int input_int = sc.nextInt(); // 2   
        String input_str = sc.next();  // apple

        System.out.println(input_int+input_srt);
    }
}
>>> 2apple

3) 구분자로 입력받기

3-1) 한줄로 입력

한줄에 구분자를 두고 여러값을 입력받는 경우도 있다.

3
1 6 7

이런식의 입력예제는 알고리즘 문제에서 많이 볼수 있었다. nextLine()을 통해 개행문자로 구분되기 전 한줄의 값을 모두 읽어올 수 있다.

public class Main {
    public static void main(String[] args) {
        String ex = "2 apple";
        Scanner sc = new Scanner(ex);

        String input_line = sc.nextLine();        
        System.out.println(input_line);
    }
}
>>> 2 apple

3-2) 입력받은 문자열을 공백을 기준으로 리스트로 담기

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("공백으로 구분된 문자열을 입력하세요:");
        String input = scanner.nextLine();

        // 입력된 문자열을 공백으로 분리하여 배열로 저장
        String[] tokens = input.split("\\s+");
    }
}

이때 배열상태인 tokens를 바로 출력하면 배열이 저장된 데이터의 주소값 이 출력된다. 이를 문자로 출력하기 위해선 Arrays.toString() 메소드를 이용해 배열을 문자열로 변환한 후에 출력해야 한다.

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("공백으로 구분된 문자열을 입력하세요:");
        String input = scanner.nextLine();

        // 입력된 문자열을 공백으로 분리하여 배열로 저장
        String[] tokens = input.split("\\s+");

        // 배열을 리스트로 변환
        List<String> list = Arrays.asList(tokens);

        // 리스트 출력 (테스트용)
        System.out.println("리스트: " + list);
    }
}

3-3) 입력받은 한줄을 숫자형 리스트로 만들기

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("공백으로 구분된 숫자를 입력하세요:");
        List<Integer> numbers = new ArrayList<>();

        while (scanner.hasNextInt()) {
            numbers.add(scanner.nextInt());
        }

        // 숫자 리스트 출력
        System.out.println("입력된 숫자: " + numbers);
    }
}

이때 nextLine() 처럼 한줄을 한번에 읽고, 그 후에 처리하는 방법은 아래와 같다.

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("공백으로 구분된 숫자를 한 줄에 입력하세요:");
        String input = scanner.nextLine();

        // 입력된 문자열을 공백으로 분리하여 숫자로 변환하여 리스트에 저장
        List<Integer> numbers = new ArrayList<>();
        String[] tokens = input.split("\\s+");
        for (String token : tokens) {
            numbers.add(Integer.parseInt(token));
        }

        // 숫자 리스트 출력
        System.out.println("입력된 숫자: " + numbers);
    }
}
반응형

+ Recent posts