next()
- 공백(스페이스/탭/개행)을 기준으로 다음 토큰 하나만 읽습니다.
- 앞쪽 공백은 건너뜁니다.
- 띄어쓰기가 있는 문자열은 중간에서 끊깁니다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 예시 입력(한 줄 또는 여러 줄 가능):
// Hello world 123
System.out.print("토큰 3개를 읽습니다: ");
String t1 = sc.next(); // "Hello"
String t2 = sc.next(); // "world"
String t3 = sc.next(); // "123"
System.out.println("\n읽은 값들:");
System.out.println("t1 = " + t1);
System.out.println("t2 = " + t2);
System.out.println("t3 = " + t3);
sc.close();
}
}

nextLine()
- 개행문자(엔터)를 만날 때까지 한 줄 전체를 통째로 읽습니다.
- 줄 끝의 개행은 소비하지만 반환 문자열에는 포함되지 않습니다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 예시 입력:
// Hello world 123
// Seoul Korea
System.out.print("한 줄 전체를 읽습니다(1): ");
String line1 = sc.nextLine(); // "Hello world 123"
System.out.print("한 줄 전체를 읽습니다(2): ");
String line2 = sc.nextLine(); // "Seoul Korea"
System.out.println("\n읽은 줄:");
System.out.println("line1 = " + line1);
System.out.println("line2 = " + line2);
sc.close();
}
}

흔히하는 실수
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 예시 입력:
// 20
// 홍 길동
System.out.print("나이 입력: ");
int age = sc.nextInt(); // 숫자만 읽고, 줄끝의 '\n'은 남겨둠
System.out.print("이름(한 줄) 입력: ");
String name = sc.nextLine(); // 남아있던 '\n'을 바로 소비 => name은 ""
System.out.println("\n결과 확인:");
System.out.println("age = " + age);
System.out.println("name = \"" + name + "\" (길이 " + name.length() + ")");
sc.close();
}
}
만약 20과 홍길동을 각각 입력하려고합니다.
그런데 20을 치자마자...

홍길동은 입력도 못해본채 갑자기 이름까지 출력되며 종료되어버립니다.
이유는 next(), nextInt(), nextDouble() 같은 토큰 단위 메서드 뒤에 바로 nextLine()을 쓰면,
앞에서 숫자/토큰만 읽고 줄 끝의 개행이 버퍼에 남아 있어서
nextLine()이 시작되자마자 버퍼에 남아있던 개행이 바로 들어오게되면서 빈 문자열을 반환되는 것입니다.
해결법
중간에 버퍼 비우기
sc.nextLine()을 한번 더 호출해주는겁니다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 예시 입력:
// 20
// 홍 길동
System.out.print("나이 입력: ");
int age = sc.nextInt(); // 숫자만 읽음 (개행 남음)
sc.nextLine(); // 남은 개행 버림(버퍼 비우기)
System.out.print("이름(한 줄) 입력: ");
String name = sc.nextLine(); // 이제 정상적으로 "홍 길동" 읽힘
System.out.println("\n결과 확인:");
System.out.println("age = " + age);
System.out.println("name = " + name);
sc.close();
}
}

next()로만 사용하는법
useDelimiter("\n")로 next()를 줄단위 처럼 쓰기!
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
sc.useDelimiter("\n"); // 구분자를 개행으로 지정 → next()가 한 줄 단위처럼 동작
// 예시 입력:
// 홍 길동 20
// Seoul Korea
System.out.print("첫 줄(next): ");
String first = sc.next(); // "홍 길동 20" 전체
System.out.print("둘째 줄(next): ");
String second = sc.next(); // "Seoul Korea" 전체
System.out.println("\n읽은 값:");
System.out.println("first = " + first);
System.out.println("second = " + second);
sc.close();
}
}

반응형
'서버&백엔드 > 🔥 JAVA' 카테고리의 다른 글
| Java 컬렉션 프레임워크 (0) | 2025.10.20 |
|---|---|
| Java | 대표적인 다형성 메서드 (1) | 2025.02.04 |
| Java | 스레드 순차적으로 실행하는 법 (0) | 2025.02.04 |
| 힙 메모리 부족 문제 (0) | 2025.02.04 |
| 스레드에서 생성된 메모리 영역은 다른 스레드에서 접근 가능할까? (0) | 2025.02.04 |