关键词搜索

源码搜索 ×
×

一篇文章带你搞定 Java 中的 BufferReader 类

发布2020-02-10浏览5493次

详情内容

一、基本概念

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));
        }
    }
    
      19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
        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;
        }
    }
    
      19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    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();
        }
    }
    
      19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    相关技术文章

    点击QQ咨询
    开通会员
    返回顶部
    ×
    微信扫码支付
    微信扫码支付
    确定支付下载
    请使用微信描二维码支付
    ×

    提示信息

    ×

    选择支付方式

    • 微信支付
    • 支付宝付款
    确定支付下载