Please Enable JavaScript!
Mohon Aktifkan Javascript![ Enable JavaScript ]

Scanner next() 와 nextLine() 차이

2010. 4. 7. 00:49programming/java

728x90

import java.util.Scanner; // 이게 표시되지 않는다면 jdk의 버전이 낮은 것이다.

public class Test{

     public static void main(String[] args) {

           Scanner scan = new Scanner(System.in); // 표준 입력 스트림에서

           String sc = scan.nextLine(); // 한 줄 단위로 입력받는다.

           String sc2 = scan.next(); // 한 글자(공백기준) 단위로 입력받는다.

           .......

Scanner scan = new Scanner(System.in);
int i = scan.nextInt();            // 1)
String s = scan.nextLine();   // 2)

이런 코드를 짤 때 첫번째 int 만 입력을 받고 그다음 nextLine() 부분을 건너띄는 경우가 발생한다.

이는 nextInt() 에서 Enter 를 칠 때 발생하는 '개행문자'를 처리하지 않고 버퍼에 남기기 때문이다.

따라서 scanner 에 있는 개행문자 \r\n 을 비워주어야 한다.

그런데 자바의 Scanner 에는 flush 함수가 없다고 하니 참 난감하다.

그렇다고 방법이 없는 것은 아닌데, 별로 맘에 들지 않는 임시방편으로 몇 가지가 있다.


1. 1번과 2번 코드 사이에 scan.nextLine() 을 집어넣어서 개행문자를 처리해버리도록 한다.

2. 1번과 2번 코드 사이에 scan.skip("[\\r\\n]+");  를 집어 넣어서 개행문자를 skip 하게 한다.

3. 1번과 2번 코드에 사용되는 scanner 를 따로 만든다. 
 
    Scanner scan1 = new Scanner(System.in);  Scanner scan2 = new Scanner(System.in);  이렇게..


개인적으론 1번이 제일 편한 것 같다.. flush를 만들면 좋겠지만 귀찮고..


nextLine() 함수가 제대로 동작 하지 않을때
c=key.nextLine(); 했는데 입력이 안될때


key.nextLine(); 
c=key.nextLine();
이렇게 해준다.

728x90

'programming > java' 카테고리의 다른 글

JDK, JRE, JVM  (0) 2010.05.05
자바?  (0) 2010.05.04
메모장으로 아스키 코드값 알아내기!!  (0) 2010.04.07
[Java] 형변환 ( int, double, long ... <-> String )  (0) 2010.04.06
변수의 초기화  (0) 2010.03.25