在Java的输入中,是以输入流的形式进入程序,因此无法直接指定输入的类型,仅能读取键盘上的内容,返回一个ASCII码,所以在使用输入流的时候,本质是一串ASCII码,需要将类型强转至char,才能正确显示。
在Java的IO流中,键盘所输入的会先存放到缓冲流中,当按下Enter键的时候,将缓重流中的数据写入到内存中,因为此性质,我们无法在键盘输入的过程中直接获取内容。
class InputDemo {
public static void main(String[] args)
throws java.io.IOException{
int input;
input=(int) System.in.read();
System.out.println(input);
}
}
当我们输入 t t t,此时输出的值为其ASCII码 116 116 116,当我们将里面的 i n t int int改为 c h a r char char,程序将正常显示出字母 t t t。
class InputDemo {
public static void main(String[] args)
throws java.io.IOException{
char input;
input=(char) System.in.read();
System.out.println(input);
}
}
在System.io.read()函数中,read是等待回车键刷取缓存的内容,因此此函数不能吸收回车和换行符,但readLine函数可以吸收回车和换行。若只是用read函数可以采用写两个read进行吸收回车。
因为Java的异常捕获机制,我们需要在函数的开头加上throws java.io.IOException
从Java5开始,Java引入了Scanner类作为输入的类型。由上可知,Java的输入是以流的方式进入,只能以字符串的形式进入,但Scanner类支持以数据类型读取内容。
由于我们是使用Scanner这个类进行输入控制,因此首先我们需要构造出这个类的对象。
Scanner input=new Scanner(System.in);
其中Scanner的函数常见的为.nextxxx,xxx为数据类型,若类型为字符串,需要使用.nextLine或者.next。.next相当于C/C++中的scanf和cin,遇到空格或回车就停止。.nextLine相对于C/C++中的gets。
class InputDemo {
public static void main(String[] args){
Scanner input=new Scanner(System.in);
String in=input.next();
System.out.println(in);
}
}
以上两种方法是用的字符输入流的形式,BufferedReader采用的是缓存输入流的形式。
同样,此类在java.io.*内,因此我们需要在开头导入包。
import java.io.*;//*表示此目录下的所有
import java.io.BufferedReader;//直接导入
BufferedReader和正常的io流成员类型基本一致,唯一不同是类的构建,BufferedReader需要使用字符输入流作为基类。
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));