Java输入的基本方法

使用Scanner类进行控制台输入

Scanner类是Java中最常用的输入工具之一,它位于java.util包中。要使用Scanner,首先需要创建一个Scanner对象:

Java如何输入:从基础到高级的完整指南

```java
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入您的姓名:");
String name = scanner.nextLine();
System.out.println("您好," + name + "!");
scanner.close();
}
}


Scanner类提供了多种方法来读取不同类型的输入:
- `nextLine()`:读取整行文本
- `next()`:读取下一个单词(以空格分隔)
- `nextInt()`:读取整数
- `nextDouble()`:读取双精度浮点数
- `nextBoolean()`:读取布尔值

### 使用BufferedReader进行高效输入

对于需要高性能输入的场景,BufferedReader是更好的选择:

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        System.out.print("请输入您的年龄:");
        int age = Integer.parseInt(reader.readLine());
        System.out.println("您的年龄是:" + age);
    }
}

BufferedReader相比Scanner在处理大量输入时性能更好,但使用起来稍显复杂。

Java如何输入不同类型的数据

数值型数据的输入

处理数值输入时需要注意异常处理:

Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个整数:");
try {
    int number = scanner.nextInt();
    System.out.println("您输入的整数是:" + number);
} catch (InputMismatchException e) {
    System.out.println("输入的不是有效整数!");
}

字符串和字符的输入

字符串输入可以使用nextLine()next()方法,区别在于:

Java如何输入:从基础到高级的完整指南

Scanner scanner = new Scanner(System.in);
System.out.print("请输入一句话:");
String sentence = scanner.nextLine(); // 读取整行

System.out.print("请输入一个单词:");
String word = scanner.next(); // 只读取到空格前的内容

对于单个字符的输入,Java没有直接的方法,但可以通过以下方式实现:

System.out.print("请输入一个字符:");
char ch = scanner.next().charAt(0);

高级输入处理技巧

处理多行输入

当需要处理多行输入时,可以使用循环结构:

Scanner scanner = new Scanner(System.in);
System.out.println("请输入多行文本(输入'end'结束):");
String line;
while (!(line = scanner.nextLine()).equalsIgnoreCase("end")) {
    System.out.println("您输入的是:" + line);
}

文件输入处理

Java如何输入文件内容?使用FileReader或Scanner:

import java.io.File;
import java.io.FileNotFoundException;

public class Main {
    public static void main(String[] args) {
        try {
            Scanner fileScanner = new Scanner(new File("input.txt"));
            while (fileScanner.hasNextLine()) {
                System.out.println(fileScanner.nextLine());
            }
            fileScanner.close();
        } catch (FileNotFoundException e) {
            System.out.println("文件未找到!");
        }
    }
}

使用正则表达式验证输入

结合正则表达式可以验证输入格式:

Scanner scanner = new Scanner(System.in);
System.out.print("请输入邮箱地址:");
String email = scanner.nextLine();

if (email.matches("[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}")) {
    System.out.println("邮箱格式正确");
} else {
    System.out.println("邮箱格式错误");
}

Java输入的最佳实践

输入验证与异常处理

健壮的程序应该处理各种异常情况:

Java如何输入:从基础到高级的完整指南

Scanner scanner = new Scanner(System.in);
int age = 0;
boolean validInput = false;

while (!validInput) {
    System.out.print("请输入您的年龄:");
    try {
        age = scanner.nextInt();
        if (age > 0 && age < 120) {
            validInput = true;
        } else {
            System.out.println("年龄必须在1-119之间");
        }
    } catch (InputMismatchException e) {
        System.out.println("请输入有效的整数!");
        scanner.next(); // 清除无效输入
    }
}

资源管理与关闭

使用完输入流后应该及时关闭:

Scanner scanner = null;
try {
    scanner = new Scanner(System.in);
    // 使用scanner进行输入操作
} finally {
    if (scanner != null) {
        scanner.close();
    }
}

Java 7+中可以使用try-with-resources语句自动关闭:

try (Scanner scanner = new Scanner(System.in)) {
    // 使用scanner进行输入操作
} // 自动关闭

Java输入在实际应用中的案例

控制台计算器实现

import java.util.Scanner;

public class Calculator {
    public static void main(String[] args) {
        try (Scanner scanner = new Scanner(System.in)) {
            System.out.println("简单计算器");
            System.out.print("请输入第一个数字:");
            double num1 = scanner.nextDouble();

            System.out.print("请输入运算符(+, -, *, /):");
            char operator = scanner.next().charAt(0);

            System.out.print("请输入第二个数字:");
            double num2 = scanner.nextDouble();

            double result;
            switch (operator) {
                case '+':
                    result = num1 + num2;
                    break;
                case '-':
                    result = num1 - num2;
                    break;
                case '*':
                    result = num1 * num2;
                    break;
                case '/':
                    if (num2 == 0) {
                        System.out.println("错误:除数不能为零");
                        return;
                    }
                    result = num1 / num2;
                    break;
                default:
                    System.out.println("错误:无效运算符");
                    return;
            }

            System.out.println("结果:" + result);
        } catch (Exception e) {
            System.out.println("输入错误:" + e.getMessage());
        }
    }
}

学生信息录入系统

import java.util.ArrayList;
import java.util.Scanner;

class Student {
    String name;
    int age;
    double score;
}

public class StudentSystem {
    public static void main(String[] args) {
        ArrayList<Student> students = new ArrayList<>();
        Scanner scanner = new Scanner(System.in);

        while (true) {
            System.out.println("\n1. 添加学生 2. 显示所有学生 3. 退出");
            System.out.print("请选择操作:");
            int choice = scanner.nextInt();

            if (choice == 1) {
                Student s = new Student();
                System.out.print("请输入学生姓名:");
                s.name = scanner.next();

                System.out.print("请输入学生年龄:");
                s.age = scanner.nextInt();

                System.out.print("请输入学生成绩:");
                s.score = scanner.nextDouble();

                students.add(s);
                System.out.println("学生信息添加成功!");
            } else if (choice == 2) {
                System.out.println("\n学生列表:");
                for (Student s : students) {
                    System.out.printf("姓名:%s 年龄:%d 成绩:%.1f\n", 
                                    s.name, s.age, s.score);
                }
            } else if (choice == 3) {
                break;
            } else {
                System.out.println("无效选择!");
            }
        }

        scanner.close();
    }
}

通过本文,您已经全面了解了Java如何输入各种类型的数据,从基础的Scanner使用到高级的文件输入处理,以及实际应用中的最佳实践。掌握这些技巧将帮助您编写更健壮、更高效的Java程序。

《Java如何输入:从基础到高级的完整指南》.doc
将本文下载保存,方便收藏和打印
下载文档