일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- OpenSearch
- char 입력
- Java 입력
- fastify
- 백준
- 설치형 SW
- mysql
- comdef
- 지속적 전달
- cli
- ECS
- docker
- MongoServerSelectionError
- 코드스테이츠
- c++
- 부트캠프
- neofetch
- zshrc error
- 프로세스
- 리눅스
- DevOps
- dfs
- SSAFY입학
- fastify-cli
- 홈 디렉토리
- 웹 SW
- 출력 명령어
- docker context create
- ci/cd
- 수직확장
- Today
- Total
다디와 괴발개발
[Java] Java에서 char 배열 입력받는 방법 본문
자바에서 입력을 받기위한 방법으로는 크게 두 가지가 있다.
첫 번째, Scanner를 이용한 입력
두 번째, BufferedReader를 이용한 방법
Scanner도 편하고 좋지만, BufferedReader가 더 빨라 알고리즘 문제를 풀 때는 BufferedReader 사용을 더 권장한다고 한다.
이번 포스팅에서는 Java에서 char 배열을 입력 받기 위한 여러 방법들을 적어보았다.
1. Scanner를 이용한 입력방법
G B G B B G
B B G B B B
G G B B G B
G G G G B B
G G G G G B
배열의 입력은 다음과 같이 들어온다고 가정해보자,
Scanner에서는 nextInt()
처럼 nextChar()
함수가 없다.
따라서 next().charAt(0)
을 사용해서 입력을 받아야 한다.
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
char arr [][] = new char[n][n];
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
arr[i][j] = sc.next().charAt(0);
}
}
2. BufferedReader를 이용한 방법
배열의 예시는 1번과 같다고 가정한다
BufferedReader는 한 줄씩 읽는 것이 특징이고, 무조건 String으로 읽기 때문에 다른 타입을 받을 경우 형변환을 해주어야 한다
또한 예외 처리를 해주어야 한다
public static void main(String[] args) throws IOException{ // IO 예외 처리
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
char arr [][] = new char[n][n];
for(int i=0; i<n; i++){
StringTokenizer st = new StringTokenizer(br.readLine());
for(int j=0; j<n; j++){
arr[i][j] = st.nextToken().charAt(0);
// 만약 int 배열이라면?
// arr[i][j] = Integer.parseInt(st.nextToken());
}
}
br.close(); // 입력을 다 받았으면 닫아주어야 한다
}
이번에는 들어오는 배열이 다음과같이 다닥다닥 붙어있는 경우에 대해서 다루어보고자 한다
GBGBBG
BBGBBB
GGBBGB
GGGGBB
GGGGGB
3. BufferedReader & charAt()을 이용한 읽기
문자열이 다닥 붙어있으므로 nextToekn()
을 사용할 수 없다. nextToken
은 띄어쓰기 기반으로 받아오기 때문이다
public static void main(String[] args) throws IOException{ // IO 예외 처리
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
char arr [][] = new char[n][n];
for(int i=0; i<n; i++){
String line = br.readLine();
for(int j=0; j<n; j++){
arr[i][j] = line.charAt(j); // charAt()을 이용하여 한 문자씩 받아준다
}
}
br.close();
}
근데 사실 이 방법보다 더 쉬운 방법이 있다.
4. BufferedReader & toCharArray()를 이용한 읽기
toCharArray()
는 문자열을 char 배열로 바꿔주는 함수이다.
이를 이용해주면 아주 간단하게 배열을 읽어올 수 있다
public static void main(String[] args) throws IOException{ // IO 예외 처리
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
char arr [][] = new char[n][n];
for(int i=0; i<n; i++){
String line = br.readLine();
arr[i] = line.toCharArray(); // toCharArray()를 통해 각 행에 해당하는 배열을 한꺼번에 받을 수 있다
}
br.close();
}
추가 : 파일로 인풋을 받을 때
콘솔로 테스트 해볼 때 마다 입력값을 주기 귀찮으므로, 파일로 인풋을 입력받고자 할 때는 다음라인을 제일 처음에 추가해주면 된다
System.setIn(new FileInputStream("Input.txt");
이 때, 인풋 파일의 경로는 프로젝트의 최상위 경로로, 만약 src 디렉토리 안에 파일이 있는 경우라면 src/Input.txt
로 경로를 수정해주면 된다
자바는 왜이렇게 귀찮게 굴까
C++ 하다가 오니까 적응이 안된다 😫