Java 控制台输入数据

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();
        }
    }

运行结果:
Java 控制台输入数据_第1张图片

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();
        }
    }

运行结果:可以看到,输入中是记录了换行符的
Java 控制台输入数据_第2张图片

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 的地方开始存
Java 控制台输入数据_第3张图片

按空格中断输入: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 循环执行了三次,并将输入按照空格切分成三个字符串

Java 控制台输入数据_第4张图片

整行输入: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();
        }
    }

运行结果:

你可能感兴趣的:(java,控制台,System-in)