Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

วิธีอ่าน Input จาก Console ใน Java (Scanner, BufferedReader)

1. Scanner (Java 5+ - ง่ายที่สุด)


import java.util.Scanner;

public class Demo {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        System.out.print("Enter string: ");
        String str = sc.nextLine();     // อ่านบรรทัดเต็ม
        
        System.out.print("Enter int: ");
        int num = sc.nextInt();         // อ่าน int
        
        System.out.print("Enter float: ");
        float f = sc.nextFloat();       // อ่าน float
        
        System.out.println("String: " + str);
        System.out.println("Int: " + num);
        System.out.println("Float: " + f);
    }
}

2. BufferedReader (เร็วกว่า, เหมาะสำหรับข้อมูลเยอะ)


import java.io.*;

public class Demo {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        System.out.print("Enter name: ");
        String name = br.readLine(); // อ่านบรรทัดเต็ม
        
        System.out.println("Name: " + name);
    }
}

3. Console Class (Java 6+ - สำหรับ password)


import java.io.Console;

public class Demo {
    public static void main(String[] args) {
        Console console = System.console();
        if (console != null) {
            String password = new String(console.readPassword("Password: "));
            System.out.println("Length: " + password.length());
        } else {
            System.out.println("Console not available (e.g. in IDE)");
        }
    }
}

เปรียบเทียบ

Best Practice

  • General purpose: Scanner
  • High performance / Large input: BufferedReader
  • Password / Sensitive: Console.readPassword()
  • ปิด resource: ใช้ try-with-resources (Java 7+)
คุณสมบัติScannerBufferedReaderConsole
Parsing (int, double)Built-in (nextInt, nextDouble)Manual (Integer.parseInt)Manual
Performanceช้ากว่า (parsing overhead)เร็ว (buffered)เร็ว
Password inputไม่รองรับ (โชว์ข้อความ)ไม่รองรับรองรับ (readPassword)
Delimiter customizationได้ (useDelimiter)ไม่ได้ (line-based)ไม่ได้
Thread-safeไม่ได้ (synchronized)ได้