Java 控制台输入数据

来源:互联网 发布:pandora软件 编辑:程序博客网 时间:2024/05/01 03:40

Java 中从控制台打印输出一般是用的 System.out,相反的,从控制台输入,用的是 System.in。这里总结三种从控制台输入的方法,分别适用于不同的场景,比如有时候需要挨个字节的输入,有时候需要按空格中断输入,有时候又需要整行输入。

字节输入 System.in.read()

一次读入一个字节的方式读入数据,抛出 IOException,构造方法有三种

  • read():每次读取一个字节数据,并返回字节对应的 int 类型十进制值(ASCII码值),如果读取结束,返回 -1,

  • read(byte[] b):每次读取一个字节数据,将数据存入 byte[] 数组中,并返回读入的字节数据的长度,如果读取结束,返回 -1

  • read(byte[] b,int off,int len):每次读取一个字节数据,总共读取 len 长度的数据,并从 byte[] 数组指定起始位置(off)开始存入数据,如果读取结束,返回 -1

代码演示:

 public static void main(String[] args) {        //演示 System.in.read() 从控制台输入数据        int r=0;        try {            while ((r=System.in.read())!=-1){                System.out.print("read: "+(char)r+" \n");            }        } catch (IOException e) {            e.printStackTrace();        }    }

运行结果:
这里写图片描述

public static void main(String[] args) {        //演示 System.in.read(byte[] b) 从控制台输入数据        byte[] b=new byte[10];        try {           int c= System.in.read(b);            System.out.println("read size: "+c);            for (int i=0;i<b.length;i++){                System.out.print(" "+(char)b[i]);            }        } catch (IOException e) {            e.printStackTrace();        }    }

运行结果:可以看到,输入中是记录了换行符的
这里写图片描述

public static void main(String[] args) {        //演示 System.in.read(byte[] b,int off,int len) 从控制台输入数据        byte[] b=new byte[10];        try {           int c= System.in.read(b,1,3);            System.out.println("read size: "+c);            for (int i=0;i<b.length;i++){                System.out.print(" "+(char)b[i]);            }        } catch (IOException e) {            e.printStackTrace();        }    }

运行结果:可以看到,这里选择读取三个字节的输入,在byte[]数组中从索引为 1 的地方开始存
这里写图片描述

按空格中断输入:Scanner

Scaner 可以读取一个字符串或者一个数组,构造方法中传入 System.in,通过 hasNext()判断输入是否完成,通过 next() 得到输入的数据,其中如果遇到space,tab 或者 enter,就会中断读取,但是输入的数据会缓存,并在下次调用 next() 时返回空格后的内容

public static void main(String[] args) {        //演示 Scanner 从控制台输入数据        Scanner scanner = new Scanner(System.in);        while (scanner.hasNext()) {            String s = scanner.next();            System.out.println("read: " + s);        }    }

运行结果:调用 next() 方法,输出字符或者数字等字节数据,并且根据空格会有中断,从第二次调用中可以看到,while 循环执行了三次,并将输入按照空格切分成三个字符串

这里写图片描述

整行输入:BufferedReader

使用BufferedReader 可以输出含有空格的字节数据,构造方法同样需要传入 System.in,通过调用readLine()返回输入的数据,还有一个read()方法,用法和System.in是一样的

public static void main(String[] args) {        //演示 BufferedReader 从控制台输入数据         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));        try {            String s = br.readLine();            System.out.println("read: " + s);        } catch (IOException e) {            e.printStackTrace();        }    }

运行结果:
这里写图片描述

0 0
原创粉丝点击