利用System.in.read() 函数从键盘读入一系列字符

来源:互联网 发布:苟利国家生死已网络梗 编辑:程序博客网 时间:2024/06/05 19:08

Q:从键盘读入一系列字符,用System.in.read() 函数来实现,要求输出所读入的字符,直到读入字符‘q’时结束。用while与do-while语句分别实现。


/** * Created by Sfwn on 2015/9/11. */import java.io.IOException;import java.io.InputStream;public class Test_02 {    private static InputStream in;    static {        in = System.in;    }    public static void getChar_while() throws IOException {        /*每执行一次指针会向后移一个byte        所以要用input变量来保存读取到的值        返回的是int值,故用printf指定格式为"%c"*/        int input = in.read();        if(input == '\n') {            input = in.read();        }        while(input != 'q') {            System.out.printf("%c", input);            input = in.read();        }    }    public static void getChar_doWhile() throws IOException {        int input = in.read();        if(input == '\n') {            input = in.read();        }        do {            System.out.printf("%c", input);            input = in.read();        } while(input != 'q');    }    public static void main(String[] args) throws IOException {        System.out.println("Select the method:\n  1.while \n  2.do while");        int panduan = System.in.read();        if(panduan == '1') {            System.out.println("Please input char or String:");            getChar_while();        } else if(panduan == '2'){            System.out.println("Please input char or String:");            getChar_doWhile();        }    }}

注意:

1.System.in.read()读取的是字节流,即ASCII码

eg:

if(panduan == '1')   // 可以写成 if(panduan == 49) , 1 的 ASCII码为 49

2.'回车' 也在字节流中,

if(input == '\n') {            input = in.read();        }
用上面的代码跳过回车字符,指向下一个实际要取的字符

if(panduan == '1')   // 可以写成 if(panduan == 49) , 1 的 ASCII码为 49
0 0