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

2023-11-01

一、基本概念

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();
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 【AI】《动手学-深度学习-PyTorch版》笔记(二十一):目标检测

    AI学习目录汇总 1 简述 通过前面的学习 已经了解了图像分类模型的原理及实现 图像分类是假定图像中只有一个目标 算法上是对整个图像做的分类 下面我们来学习 目标检测 即从一张图像中找出需要的目标 并标记出位置 2 边界框 边界框 boun
  • xctf攻防世界—Web新手练习区robots单题思路

    xctf攻防世界 Web新手练习区robots单题思路 邱邱邱自强 前言 随着互联网的发展 互联网界的行为也越来越被重视 那么国际互联网界通行的道德规范是什么呢 它就是Robots协议 一 Robots协议是什么 robots协议也叫rob
  • 点击Path环境变量编辑不展开的问题

    分析 将 MYSQL HOME bin移动到 JAVA HOME bin的上面 点击确定 再次点击Path环境变量就会出现编辑不展开的问题 如图所示 分析原因 因为我把两个 MYSQL HOME bin和 JAVA HOME bin一起放在
  • zip、unzip命令使用

    1 zip压缩命令 1 压缩文件 zip test test txt 将text txt文件压缩到test zip文件中 2 压缩文件夹 r zip r attack zip attack 将当前路径下attack文件夹中的文件进行压缩 压
  • assert在debug 和 release版本中的区别

    转自 https blog csdn net panfengsoftware article details 8910468 debug版本与release的不同点 debug版本中含有调试信息 不会对程序进行优化 assert相应的宏会被
  • python-一些坑点

    一些python使用中遇到的坑点 记录一下 同样的问题也可能只是对当前我的环境下有作用 AttributeError module urllib has no attribute splittype 使用urllib中的一些工具时 提示这个
  • FPGA中task语法基本使用

    1 task定义为任务 完成的是某个具体功能 可以在initial语句和always语句中使用 不过initial语句使用较多 2 task如何使用 1 定义任务 task 任务名 端口及数据类型声明语句 语句1 语句2 语句n endta
  • Qt 3D的研究(三):显示3D模型

    Qt 3D的研究 三 显示3D模型 上一篇文章介绍了如何使用最少的代码创建一个Qt 3D的应用 和大家最初接触的glut一样 对于3D应用来说 需要做的准备工作还真不少 不过呢 Qt 3D把一些窗口相关的琐碎事情解决了 剩下的 该由我们完成
  • 修复nanopi2的SPI无法使用50MHZ传输的问题(S5P4418)

    关于S5P4418使用SPI DMA传输时出现的超时问题 一 问题背景 二 启用SPI的DMA传输 2 1 修改cfg main h 文件 2 2 make menuconfig 配置SPI 2 3 修改SPI主机驱动代码 2 4 增加设备
  • vue cmd 创建新项目在指定文件夹

    1 cmd 进入 后 转到指定目录 cd D 2 创建vue新项目 vue create test
  • 基于minikube搭建的SpringBoot实战

    现在比较多的互联网公司都在尝试将微服务迁到云上 这样的能够通过一些成熟的云容器管理平台更为方便地管理微服务集群 从而提高微服务的稳定性 同时也能较好地提升团队开发效率 但是迁云存在一定的技术难点 今天这篇文章主要介绍如何从0开始搭建一套基于
  • 我的世界服务器修改空岛范围,我的世界空岛指令权限大全

    发布时间 2016 08 07 我的世界ess指令是什么 我的世界ess指令在ess插件运行中十分重要的一部分 那么今天小编就为大家带来了我的世界ess指令用法大全 一起看看吧 我的世界ess指令 Essentials插件 用户组权限管理插
  • OTA:目标检测的最优运输分配

    引言 该论文主要是关于目标检测中的标签分配问题 作者创新性地从全局的角度重新审视了该问题 并提出将标签分配问题看成是一个最优运输问题 要知道最优传输问题是当前最优化理论和GAN理论研究领域中的一个很火的研究课题 论文的实验效果俱佳 而且作者
  • redis系列,redis是如何执行命令(一)

    文章目录 前言 一 从io读取数据 二 解析buf数据 三 解析命令流程 总结 前言 上篇文章介绍了sds的结构 和sds的使用方法 这章我们在回到读取io数据的地方来看 redis是如何从io 读取数据最后转化成执行命令的过程 本篇文章需
  • 计量经济学及Stata应用 第三章习题

    3 1 对于随机变量X 证明Var X E x2 E X 2 3 2对于随机变量X与Y 证明Cov X Y E XY E X E Y 3 3对于随机变量X Y Z 证明Cov X Y Z Cov X Y Cov X Z 3 4 二维随机向量
  • MySQL----MySQL数据库出现Lost connection to MySQL server during query错误的解决办法

    原文链接 MySQL MySQL数据库出现Lost connection to MySQL server during query错误的解决办法 问题描述 Mysql数据库在查询数据库的时候回报出了如下异常 Lost connection
  • Winsock 2 I/O Methods 5 Part 11

    Winsock 2 I O Methods 5 Part 11 What do we have in this chapter 5 part 11 Testing the Client server Program Completion P
  • 中国医疗信息化行业发展规模及投资方向研究报告2021~2027年

    第1章 中国医疗信息化行业发展背景1 1 医疗信息化行业发展背景及意义 1 1 1 医疗信息化行业定义 1 1 2 医疗信息化行业发展背景 1 信息技术促进医疗行业变革 2 医疗卫生改革推动医疗信息化行业发展 3 我国医疗信息化处于临床信息
  • FPGA实现“乒乓操作”

    一 乒乓操作 概述 1 结构 乒乓操作 是一种常用于数据流控制的处理技巧 可以实现无缝高速数据流缓存 首先 乒乓操作 这个名字本身就很吸引人 其结构一般是由数据选择器和数据缓冲器构成的 数据缓冲模块可以为任何存储模块 比较常用的存储单元为双
  • 一篇文章带你搞定 Java 中的 BufferReader 类

    文章目录 一 基本概念 二 键盘输入数据的标准格式 三 相关操作实例 1 加法操作 2 菜单显示 一 基本概念 BufferReader 类用于从缓冲区中读取内容 所有的输入字节数据都将放在缓冲区中 常用方法 readLine 一次读取一行