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

Java 控制台輸入處理:Scanner 類完整使用指南與常見陷阱

     編輯:Java 相關知識

基本用法

java.util.Scanner 是 JDK 5 引入的簡單文本掃描器,可解析基本類型和字符串。通過 System.in 包裝即可實現控制台輸入讀取。

核心代碼示例

import java.util.Scanner;

public class InputCode {
    public static void main(String[] args) {
        // 1. 創建掃描器,關聯標準輸入流
        Scanner scanner = new Scanner(System.in);

        // 2. 提示用戶輸入
        System.out.println("請輸入你的身份證號:");

        // 3. 讀取一行文本(包含空格)
        String line = scanner.nextLine();

        // 4. 處理並輸出結果
        System.out.println("原來你身份證號是 " + line.length() + " 位數字的啊");

        // 5. 關閉掃描器(良好習慣,釋放資源)
        scanner.close();
    }
}

常用方法對比

方法功能分隔符典型場景
next()讀取下一個 token(非空白字符序列)空白字符(空格、換行、Tab)單詞、單個標識符
nextLine()讀取整行(含前導/尾隨空格,不含換行符)換行符完整句子、包含空格的輸入
nextInt()解析下一個 token 為 int空白字符數字輸入
hasNext()判斷是否有下一個 token-循環讀取未知數量輸入

經典陷阱:nextInt() 後調用 nextLine() 讀到空行

Scanner sc = new Scanner(System.in);
int age = sc.nextInt();      // 輸入 "25\n",nextInt() 讀取 25,緩衝區殘留 "\n"
String name = sc.nextLine(); // 直接讀取殘留的 "\n",返回空字符串 ""

解決方案

  • 方案一:nextInt() 後額外調用一次 sc.nextLine() 消耗換行符。
  • 方案二:統一使用 nextLine() 讀取行,再自行解析(Integer.parseInt())。

進階用法

自定義分隔符

scanner.useDelimiter(","); // 以逗號分隔
while (scanner.hasNext()) {
    System.out.println(scanner.next());
}

從文件/字符串讀取

// 文件
Scanner fileScanner = new Scanner(new File("data.txt"));

// 字符串
Scanner strScanner = new Scanner("apple,banana,orange").useDelimiter(",");

最佳實踐總結

  1. 優先使用 nextLine() 讀取整行,避免分隔符殘留問題。
  2. 數值解析使用 Integer.parseInt(line.trim()) 等靜態方法,異常可控。
  3. 在 try-with-resources 中使用(Java 7+),自動關閉:
    try (Scanner scanner = new Scanner(System.in)) {
        // 使用 scanner
    }
    
  4. 高性能/多線程場景考慮 BufferedReader + 手動解析,Scanner 內部同步有開銷。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved