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();
}
}
运行结果:
本文介绍了Java从控制台获取输入的三种方式:字节输入通过System.in.read(),按空格中断输入使用Scanner,以及整行输入借助BufferedReader。详细讲解了每个方法的使用场景和代码示例,帮助开发者灵活处理不同情况下的控制台输入需求。
1万+

被折叠的 条评论
为什么被折叠?



