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

Java 小範例:從控制台讀取使用者輸入的漸進式最佳實踐

     編輯:Java 相關知識

早期 BASIC 用 INPUT、C 用 scanf()、C++ 用 cin,Java 卻需要串流包裝,初學者常覺得繁瑣。本文以「讀取使用者輸入」為例,逐步重構,展示從基礎 API 到彈性驗證的完整演進,幫你建立清晰的 I/O 觀念與良好程式結構。

階段 1:最基本的讀取

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class BasicInput {
    public static void main(String[] args) {
        try {
            // System.in 為標準輸入位元組串流(預設連接控制台)
            InputStreamReader isReader = new InputStreamReader(System.in);
            // BufferedReader 可一次讀取一行字串
            String str = new BufferedReader(isReader).readLine();
            System.out.println("您輸入的是:" + str);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

核心三行:InputStreamReader(位元組→字元)→ BufferedReader(緩衝讀行)→ readLine()。

階段 2:抽取方法,加入提示文字

public class BasicInput {
    public static void main(String[] args) {
        try {
            String str = readUserInput("請輸入您的年齡:");
            System.out.println("您輸入的是:" + str);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static String readUserInput(String prompt) throws IOException {
        System.out.print(prompt); // 不換行顯示提示
        InputStreamReader isReader = new InputStreamReader(System.in);
        return new BufferedReader(isReader).readLine();
    }
}

階段 3:不允許空輸入(do-while 迴圈)


private static String readUserInput(String prompt) throws IOException {
    String result;
    do {
        System.out.print(prompt);
        InputStreamReader isReader = new InputStreamReader(System.in);
        result = new BufferedReader(isReader).readLine();
    } while (result.equals("")); // 空字串重新輸入
    return result;
}

階段 4:抽離驗證邏輯,支援擴充規則


public class BasicInput {
    public static void main(String[] args) {
        try {
            String str = readUserInput("請輸入您的年齡:");
            System.out.println("您輸入的是:" + str);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static String readUserInput(String prompt) throws IOException {
        String result;
        do {
            System.out.print(prompt);
            InputStreamReader isReader = new InputStreamReader(System.in);
            result = new BufferedReader(isReader).readLine();
        } while (isInvalid(result)); // 委派驗證
        return result;
    }

    private static boolean isInvalid(String str) {
        return str.equals(""); // 可擴充:長度、格式、正則等
    }
}

階段 5:只允許數字輸入(正則表達式)


private static boolean isInvalid(String str) {
    return str.equals("") || !str.matches("\\d+");
}

str.matches("\\d+") 判斷是否全為數字。若需正負整數:-?\\d+;浮點數:-?\\d+(\\.\\d+)?。

完整最終版程式碼


import java.io.*;

public class BasicInput {
    public static void main(String[] args) {
        try {
            String str = readUserInput("請輸入您的年齡:");
            System.out.println("您輸入的是:" + str);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static String readUserInput(String prompt) throws IOException {
        String result;
        do {
            System.out.print(prompt);
            InputStreamReader isReader = new InputStreamReader(System.in);
            result = new BufferedReader(isReader).readLine();
        } while (isInvalid(result));
        return result;
    }

    private static boolean isInvalid(String str) {
        return str.equals("") || !str.matches("\\d+");
    }
}

進階補充:Java 5+ Scanner 更簡潔


import java.util.Scanner;

public class ScannerInput {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("請輸入您的年齡:");
        while (!scanner.hasNextInt()) {
            System.out.print("請輸入數字:");
            scanner.next(); // 丟棄非數字
        }
        int age = scanner.nextInt();
        System.out.println("您輸入的是:" + age);
    }
}

Scanner 內建 hasNextInt()、nextInt() 等型別檢查,適合簡單互動;但大量資料或需精確控制編碼時,BufferedReader 更靈活。

小結

Java 控制台輸入雖需串流包裝,但透過方法抽取、驗證邏輯分離、正則表達式,即可得到結構清晰、易擴充的程式碼。掌握 InputStreamReader → BufferedReader 基礎鏈,再視需求選擇 Scanner 或自訂驗證框架,是處理互動式輸入的扎實功力。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved