본문 바로가기

프로그래밍 언어/JAVA 공부

JAVA input 처리(Scanner, String)

반응형

1. Scanner

nextInt() 사용 후, nextLine()을 사용하면 제대로 읽어들이지 않는 문제가 발생합니다. 그 이유는 nextInt() 메소드는 가장 마지막 개행 문자 '\n'까지 읽어들이지 않기 때문입니다. 따라서 그 개행문자는 다음에 호출된 nextLine()에서 읽어들이게 되어서 nextLine()에 아무것도 들어가지 않는(원하는 값이 들어가지 않는) 것이죠.

이 문제를 해결하기 위해서 저는 2가지 방법을 사용하는데요,


1. 모두 nextLine()으로 읽어들인 후, 정수가 필요할 때 스트링안에서 처리를 해줍니다. 예를 들면 Integer.parseInt() 또는 {input}.charAt([index]) 같은 메소드를 사용하는 것이죠


2. 두번째로는 nextInt()이후에, [Scanner이름].nextLine(); 한 번 입력해주면 그 다음부턴 원하는 스트링을 읽어들일 수 있습니다.:)


* 주의 ) 일반적으로 input 이 모두 숫자로 이루어진 경우 nextInt()를 계속해서 사용하게 됩니다. 그러나 0100 1000 1100 1101 과 같이 한 라인에 숫자가 연결되어 input으로 들어올 경우, Scanner는 0 1 0 0 으로 읽지 못하고 0100을 한 뭉텅이로 100으로 인식하게 돼요. 이런 경우는 input처리가 제대로 되지 않는 경우이니까 이때는 Scanner.nextLine()을 사용하고 1번의 방식을 따라야 합니다.


2. String -> int 배열


이번에는, String으로 받은 문자열을 정수형 배열에 저장해봅니다.

int N = Integer.parseInt(temp);
String [] line = new String[N];
map = new int [N][N];
for(int i=0; i<N; i++){
line[i]=scan.nextLine();
for(int j=0; j<N; j++){
map[i][j]= Integer.parseInt(line[i].charAt(j));
}
}

위와 같이 작성할 경우 map배열에 배정하는 도중 char는 String으로 치환할 수 없다는 에러가 뜨게 됩니다. 이를 더 간편하게 할 수 있는 방안은, 아래와 같이 코드를 작성하면됩니다.


int N = Integer.parseInt(temp);
String [] line = new String[N];
map = new int [N][N];
for(int i=0; i<N; i++){
line[i]=scan.nextLine();
for(int j=0; j<N; j++){
map[i][j]= line[i].charAt(j)-'0';
}
}

이미 저장된 char에서 '0'에 해당되는값을 빼준 후, char은 int 에 바로 적용이 가능하기 때문에 원하는 정수 값을 배정할 수 있습니다.




반응형

'프로그래밍 언어 > JAVA 공부' 카테고리의 다른 글

JAVA string 관련 메소드  (0) 2019.09.25
Java Priority Queue 사용하기 - Comparable interface  (0) 2019.04.06
JAVA HashMap 정리  (0) 2019.03.21
java 자료구조  (0) 2019.03.07