귀찮은 스캐너 찌꺼기 청소법


import java.util.Scanner;

public class Check {
	static Scanner sc = new Scanner(System.in);
	
	public static void main(String[] args) {
		// 1. next 후 nextLine 사용 시
		print("[ 문제점 ]");
		print("1번 입력");
		print(next());
		print("2번 입력");
		print(nextLine());
		/*
		 ** 문제 **: nextLine 입력도 안했는데 프로그램 종료됨 
		 ** 원인 **: 1번 입력 next() 함수는 사용자가 입력 할 때 누르는 Enter
		 * 키로 발생하는 newline (\n) 문자를 받을 수 없어서 스캐너에 남아 있게됨 
		 * 2번 입력 nextLine() 함수가 실행되는 즉시 사용자가 입력하기도 전에 
		 * 남아 있던 newLine이 nextLine() 함수에게 소모되고 함수도 종료됨 
		 */
		/* 해결법 1 */
		print("[ 해결법1 ]");
		print("1번 입력");
		print(next());
		if(sc.hasNextLine()) {
			nextLine();
		}	
		print("2번 입력");
		print(nextLine());
		/*
		 * 1번 입력 받은 후 스캐너에 남아 있는 newline을
		 * nextLine() 함수를 추가하는 걸로 소모한다
		 * */
		/* 해결법2 */
		print("[ 해결법2 ]");
		String[] tokens = nextLine().split(" ");
		for (String s : tokens) {
			System.out.print(s + " ");
		}
		/*
		 * nextLine 으로 공백을 포함한 행 전체 (Enter 키 누르기 전까지)를 
		 * 한번에 입력 받고 배열로 저장한다
		 * */
	}	
	static void print(String s) {
		System.out.println(s);
	}
	static String next() {
		return sc.next();
	}
	static String nextLine() {
		return sc.nextLine();
	}
}

댓글

이 블로그의 인기 게시물

substring 예제: 문자열을 입력 받아 한 글자씩 회전시켜 모두 출력하는 프로그램을 작성하라

다형성 추가정리, instanceof

사각형 넓이 비교 문제