使用 `Scanner.nextInt()` 後緊接 `nextLine()` 讀取字符串時,首行會被跳過。這是因為 `nextInt()` 不消耗換行符,導致 `nextLine()` 讀到空行。本文解析原因並給出三種解決方案。
Scanner input = new Scanner(System.in);
int number = input.nextInt(); // 輸入 2 並按回車
String[] name = new String[number];
for (int i = 0; i < number; i++) {
name[i] = input.nextLine(); // 第一次循環讀到空字符串!
}
"2\n"2,停留在 `\n` 前int number = input.nextInt();
input.nextLine(); // 關鍵:消耗殘留的換行符
for (int i = 0; i < number; i++) {
name[i] = input.nextLine(); // 正常讀取
}
int number = Integer.parseInt(input.nextLine().trim());
for (int i = 0; i < number; i++) {
name[i] = input.nextLine();
}
for (int i = 0; i < number; i++) {
name[i] = input.next(); // 按空白分隔,自動跳過換行符
}
缺點:姓名含空格 (如 "Mary Ann") 會被截斷。
public class InputUtil {
private static Scanner sc = new Scanner(System.in);
public static int readInt() {
return Integer.parseInt(sc.nextLine().trim());
}
public static String readLine() {
return sc.nextLine();
}
}
\\s+ (空白字符:空格、制表符、換行符)\n (僅換行符)`nextInt()` 後殘留換行符是 Java Scanner 經典坑。**牢記:混用 `nextXxx()` 和 `nextLine()` 時,必須額外 `nextLine()` 清理緩沖區**,或全程統一用 `nextLine()` + 手動解析。