首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java Scanner 類詳解:next()、nextLine()、nextInt()、hasNextInt() 差異比較

     編輯:Java 相關知識

Java 輸入處理核心:Scanner 方法行為差異與常見坑

java.util.Scanner 是 Java 基礎輸入最常用的工具,但 next()、nextLine()、nextInt()、hasNextInt() 的行為差異常導致新手困惑。本文透過圖解與範例徹底釐清。

方法行為對照表

方法讀取範圍分隔符處理游標位置典型用途
next()下一個 token(預設空白分隔)跳過前導分隔符,讀取到下一個分隔符不包含分隔符停在分隔符前讀取單字、字串 token
nextLine()整行(含空白)讀取到 換行符 \n,包含換行符並丟棄移到下一行開頭讀取整行文字、含空格字串
nextInt()下一個 token → 解析為 int同 next(),再嘗試轉型同 next()直接讀取整數
hasNextInt()檢視下一個 token 是否可解析為 int不移動游標不變輸入驗證、避免異常

情境模擬:輸入 "a b c\n"

呼叫順序          回傳值        游標位置(^)
--------------------------------------------------
next()           "a"          ^ b c\n
next()           "b"            ^ c\n
nextLine()       " c"           ^\n (下一行開頭)

經典陷阱:nextInt() 後緊接 nextLine()

Scanner sc = new Scanner(System.in);
int age = sc.nextInt();      // 輸入 "25\n",讀取 25,游標停在 \n 前
String name = sc.nextLine(); // 直接讀到 \n → 回傳空字串 ""!

解法:在 nextInt() 後呼叫一次 sc.nextLine() 吃掉殘留換行符,或統一使用 nextLine() 再自行 Integer.parseInt()。

完整範例:安全讀取三整數求和

import java.util.Scanner;

public class SumThree {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("請輸入三個整數(空白或換行分隔):");
        int a = 0, b = 0, c = 0;
        if (input.hasNextInt()) a = input.nextInt();
        if (input.hasNextInt()) b = input.nextInt();
        if (input.hasNextInt()) c = input.nextInt();
        System.out.println("總和 = " + (a + b + c));
        input.close();
    }
}

進階技巧

  • 自訂分隔符:sc.useDelimiter(",") 以逗號分隔 token。
  • 正則分隔:sc.useDelimiter("\\s*,\\s*") 支援逗號前後可有空白。
  • 資源釋放:使用 try-with-resources 自動關閉:try (Scanner sc = new Scanner(System.in)) { ... }。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved