一、基本概念

BufferReader 类用于从缓冲区中读取内容,所有的输入字节数据都将放在缓冲区中,常用方法:
在这里插入图片描述

readLine 一次读取一行

由于 BufferReader 中定义的构造方法只能接收字符输入流的实例,所以必须使用字符输入流和字节输入流的转换类 InputStreamReader 将字节输入流 System.in 变为字符流
在这里插入图片描述

因为 BufferReader 只能接收字符流的缓冲区,因为每一个中文要占两个字符,所以需要将 System.in 这个字节的输入流变为字符的输入流

二、键盘输入数据的标准格式

将 System.in 变为字符流放入到 BufferedReader 后,可以通过 readLine() 方法等待用户输入信息。

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

public class Test{
    public static void main(String[] args) {
        BufferedReader buf = null;//声明 BufferedReader 对象
        buf = new BufferedReader(new InputStreamReader(System.in));//实例化 BufferedReader
        String str = null;//接收输入内容
        System.out.print("请输入内容:");
        try{
            str = buf.readLine();//读取输入内容
        }catch (IOException e){
            e.printStackTrace();
        }
        System.out.println("输入内容为:" + str);
    }
}

此时可以发现程序没有了长度的限制,同时也可以正确接收中文,这是键盘输入数据的标准格式

三、相关操作实例

1. 加法操作

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

class InputData{
    private BufferedReader buf = null;
    public InputData(){
        //在类的构造方法中实例化
        this.buf = new BufferedReader(new InputStreamReader(System.in));
    }
    public String getString(String info){//从此方法中得到字符串的信息
        String temp = null;
        System.out.print(info);
        try{
            temp = this.buf.readLine();
        }catch (IOException e){
            e.printStackTrace();
        }
        return temp;
    }
    public int getInt(String info,String err){//得到一个整数的输入数据
        int temp =0;
        String str = null;
        boolean flag = true;//定义一个循环的标志
        while (flag){
            str = this.getString(info);
            if (str.matches("^\\d+$")){//判断输入的是否是数字
                temp = Integer.parseInt(str);//将字符串变为数字
                flag = false;
            }else {
                System.out.println(err);//出现错误信息打印传递错误信息
            }
        }
        return temp;
    }
}

public class Test{
    public static void main(String[] args) throws Exception{
        int i=0;
        int j=0;
        InputData input = new InputData();
        i = input.getInt("请输入第一个数字:","输入的数据必须是数字,请重新输入!");
        j = input.getInt("请输入第二个数字:","输入的数据必须是数字,请重新输入!");
        System.out.println(i + "+" + j3 + "=" + (i+j));
    }
}
    public float getFloat(String info,String err){//得到一个小数的输入数据
        float temp =0;
        String str = null;
        boolean flag = true;
        while (flag){
            str = this.getString(info);
            if (str.matches("^\\d+.?\\d+$")){//判断是否是小数
                temp = Float.parseFloat(str);
                flag = false;
            }else {
                System.out.println(err);
            }
        }
        return temp;
    }
    public Date getDate(String info, String err){
        Date d = null;
        String str = null;
        boolean flag = true;
        while (flag){
            str = this.getString(info);
            if (str.matches("^\\d{4}-\\d{2}-\\d{2}$")){
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                try{
                    d = sdf.parse(str);
                }catch (ParseException e){
                    e.printStackTrace();
                }
                flag = false;
            }else {
                System.out.println(err);
            }
        }
        return d;
    }
}

2. 菜单显示

class Operate{
    public static void add(){
        System.out.println("**选择的是增加操作");
    }
    public static void delete(){
        System.out.println("**选择的是删除操作");
    }
    public static void update(){
        System.out.println("**选择的是更新操作");
    }
    public static void find(){
        System.out.println("**选择的是查看操作");
    }
}

class Menu{
    public Menu(){
        while (true){
            this.show();//无限制调用菜单的显示
        }
    }
    public void show(){
        System.out.println("==== Xxxx系统 ====");
        System.out.println("[1] 增加数据");
        System.out.println("[2] 删除数据");
        System.out.println("[3] 修改数据");
        System.out.println("[4] 查看数据");
        System.out.println("[0] 系统退出\n");
        InputData input = new InputData();
        int i = input.getInt("请选择:","请输入正确的选项!");
        switch (i){
            case 1: Operate.add();break;
            case 2: Operate.delete();break;
            case 3: Operate.update();break;
            case 4: Operate.find();break;
            case 0: System.exit(1);break;//系统退出
            default: System.out.println("请选择正确的操作");

        }
    }
}
public class Root{
    public static void main(String[] args) {
        new Menu();
    }
}
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐