java nextLine For input string: ""

canyi·2023년 6월 13일
0

java m1

목록 보기
9/40

nextLine() vs next()

nextLine(): 입력 스트림에서 한 줄을 읽음. 개행 문자를 만날 때까지 모든 문자를 읽어옴. 따라서, 공백을 포함한 문자열을 읽을 수 있음.

next(): 입력 스트림에서 공백이나 개행 문자를 만나기 전까지의 문자열을 읽어옴. 공백으로 구분된 단어를 읽을 때 주로 사용됩니다.

두 메서드의 차이점은 문자열을 읽는 범위임. nextLine()은 한 줄 전체를 읽어오기 때문에 개행 문자까지 읽음. 반면에 next()는 공백이나 개행 문자를 만나기 전까지만 읽음.

예를 들어, 입력이 "Hello World"라고 가정하면:

nextLine()을 사용하면 "Hello World" 전체를 읽어옵니다.
next()를 사용하면 "Hello"만 읽어옵니다.
따라서, 입력에 따라 어떤 메서드를 사용할지는 상황에 맞게 결정해야 함. 문자열 전체를 읽어야 할 경우에는 nextLine()을 사용하고, 단어 단위로 읽어야 할 경우에는 next()를 사용하면 됩니다.

java class 예시

For input string: "" 에러

package java20230612;

import java.util.Scanner;

public class ex10_입력_scanner {
	public static void main(String[] args) {
//		입력
		Scanner sc = new Scanner(System.in);
		System.out.println("정수를 입력하세요.");
//		Scanner 객체를 이용하여 한 줄 단위로 입력 받음
		String input = sc.nextLine();
//		입력받은 문자열을 정수로 변환. 이때 ex13_입력.java숫자가 아닌 것이 섞여있으면 안됨.
		int x = Integer.parseInt(input);
		System.out.println(x);
		
//		변환 없이 정수 바로 입력 받기
		System.out.println("정수를 입력하세요.");
		x = sc.nextInt();
		System.out.println(x);

		System.out.println("정수를 입력하세요.");
		input = sc.nextLine();
//		input = sc.next();
		x = Integer.parseInt(input);
		System.out.println(x);

//		System.out.println("정수를 입력하세요.");
//		x = sc.nextInt();
//		System.out.println(x);
		
	}
}

java에서 위 코드를 빌드 할 경우 정수를 정확인 입력한 상태인 경우에도 22행 input = sc.nextLine(); 에서 공백값을 넣었다고 에러가 발생 한다. enter 를 입력을 한 다음 개행문자가 들어가서 에러남.

이럴 경우 nextLine()을 next() 메서드를 사용하여 잘못된 입력값을 버리고 다음 입력을 받도록 할수 있다.

해결법 1

input = sc.nextLine(); > input = sc.next();
package java20230612;

import java.util.Scanner;

public class ex10_입력_scanner {
	public static void main(String[] args) {
//		입력
		Scanner sc = new Scanner(System.in);
		System.out.println("정수를 입력하세요.");
//		Scanner 객체를 이용하여 한 줄 단위로 입력 받음
		String input = sc.nextLine();
//		입력받은 문자열을 정수로 변환. 이때 ex13_입력.java숫자가 아닌 것이 섞여있으면 안됨.
		int x = Integer.parseInt(input);
		System.out.println(x);
		
//		변환 없이 정수 바로 입력 받기
		System.out.println("정수를 입력하세요.");
		x = sc.nextInt();
		System.out.println(x);

		System.out.println("정수를 입력하세요.");
//		input = sc.nextLine();
		input = sc.next();
		x = Integer.parseInt(input);
		System.out.println(x);

//		System.out.println("정수를 입력하세요.");
//		x = sc.nextInt();
//		System.out.println(x);
		
	}
}

해결법 2 buffer 추가

profile
백엔드 개발 정리

0개의 댓글