차이점 :
개행문자
를 무시하냐 안하냐의 차이
공백 전까지의 단어
를 읽는다.개행 문자를 가져오지 않는다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str = scan.next();
System.out.println(str);
}
}
엔터를 치기 전까지의 문장 전체
를 입력받는다.버퍼에 입력된 문자열을 개행 문자까지 다 가져온다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str = scan.nextLine();
System.out.println(str);
}
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int num;
String str;
System.out.println("num입력");
num = input.nextInt();
System.out.println("str입력");
str = input.nextLine();
System.out.println("num : " + num);
System.out.println("str : " + str);
input.close();
}
}
원했던 입력은 num입력, str입력이다. 하지만, num을 입력하면 바로 출력이 된다.
why? next()는 개행문자를 무시하고 입력을 받고 nextLine()은 한줄 단위로 입력을 받기 때문에 개행문자를 포함한다.
좀 더 설명하자면, 위에 출력결과처럼 10을 입력하고 Enter를 쳤다면 버퍼에 10\이 존재한다. 이때 nextInt()가 버퍼의 내용을 가져올 때 개행문자를 무시하고 가져오기 때문에 10만 가져오게 된다. 그러면 버퍼에 \n이 남아있는데 nextLine()은 공백문자, 개행문자를 포함시키기 때문에 \n만 가져오고 프로그램이 종료되는 것이다.
- nextLine()을 next()로 바꿔주면 원하는 결과를 얻을 수 있다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int num;
String str;
System.out.println("num입력");
num = input.nextInt();
System.out.println("str입력");
str = input.next();
System.out.println("num : " + num);
System.out.println("str : " + str);
input.close();
}
}
- nextInt()와 nextLine() 사이에 nextLine() 또는 skip("\r\n") 을 하나 추가하여 개행 문자를 버퍼에서 없애주면 원하는 문자열을 입력받을 수 있다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int num;
String str;
String str1;
System.out.println("num입력");
num = input.nextInt();
str1 = input.nextLine();
System.out.println("str입력");
str = input.nextLine();
System.out.println("num : " + num);
System.out.println("str : " + str);
input.close();
}
}
참고 자료
🔗 next(), nextLine()의 차이