关于java的输入的几种方式。
- 首先我们最常用的一种方法就是通过Scanner 实现从键盘读取String类型数据,头文件是import
java.util.Scanner,即:
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
.nextLine() 获取一行字符串、.next() 获取一个字符串、.nextInt() 将取得的字符串转换成int
类型、.nextFloat() 将取得的字符串转换为float
类型、.nextBoolean()、.nextShort、.nextByte()、.nextDouble()、.nextLong()等对应不同的输入数据,但问题来了,Scanner是什么类,实例化时候传入的System.in又是什么。
其实java.util.Scanner,是一个简单的文本扫描程序,可以使用正则表达式解析基本类型和字符串,当通过new
Scanner(System.in)创建一个Scanner,控制台会一直等待输入,直到敲回车键结束,把所输入的内容传给Scanner作为扫描对象,然后要获取相应的数据就调用scanner.next()等方法进行数据传输。
对于Scanner实例化时传入的System.in这其实是PrintStream的一个实例,只能按字节读取。因此默认情况下,无法读取char数据。System.in与System.out都是字节流而非字符流,PrintStream所做的工作,就是为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式。也就是说PrintStream实例提供了从键盘读取数据的功能,而scanner则是对他进行了一层封装,或者说是一种容器,将PrintStream输入流或者文件流放入表明此流已打开并准备接收输出数据就可以获取到数据。
- 另外一种就是直接使用System.in.read()方法从键盘获取一个整形字节数据,并以Unicode码(我感觉跟Ascll码没啥区别)形式返回:System类代表的是系统,系统级的很多属性和控制方法都放置在该类的内部。该类位于java.lang包。System类内部包含in、out和err三个成员变量,分别代表标准输入流(键盘输入),标准输出流(显示器)和标准错误输出流(显示器)。由于该类的构造方法是private的,所以无法创建该类的对象,也就是无法实例化该类。其内部的成员变量和成员方法都是static的,所以也可以很方便的进行调用,即:
但同时也要在方法命名后添加抛出异常。
第三种是采用BufferReader取得用户的输入:
它是java.io包中所提供的一个类,BufferedReader是为了提供读的效率而设计的一个包装类,它可以包装字符流,同时使用BufferReader对象的readline()方法时也必须加上异常处理 BufferedReader类从字符输入流中读取文本并缓冲字符,以便有效地读取字符,数组和行,我jio得它和scanner都是一种容器,用来封装具体的键盘输入操作,基本使用方法:
BufferReader其他的不想写了,有点累,开始摆烂。。。。