Scanner类
Scanner主要用于获取键盘输入的内容。
1、构造方法
Scanner类有很多种构造方法,一般用于输入的话则是Scanner(InputStream source),所需参数为InputStream,如果想获取键盘输入的内容,则需要选择System类的静态成员变量:System.in。它的描述是“标准”输入流,是一个InputStream类型的变量。格式如下:Scanner sc=new Scanner(System.in)。
2、基本方法
(1)hasNextXxx():判断输入的值是否为Xxx型的,如果为hasNext()则是判断是否有值输入。一般用在判断语句或循环语句中。
(2)nextXxx():用于返回键盘输入的Xxx类型的值。该方法可以使用多次,每使用一次就可以输入并获取一次数据,不需要再定义一个Scanner对象进行多次数据的获取。
3、next()和nextLine()方法的区别
nextLine()方法仅仅是以Enter键为结束符,返回的是Enter键前面的所有字符,包括空格、Tab键等等。
next()方法结束符比nextLine()多,Enter键、空格、Tab键都是结束符。不过只有在输入有效字符之后,next()方法才将其后输入的空格键、Tab键或Enter键等视为分隔符或结束符。即如果一开始就输入空格键、Tab键或Enter键,它是被无视。
简单的说,就是next()方法无法获取带有空格、Tab键的字符串,而nextLine()方法则可以。
4、一个小问题
如果第一次使用nextXxx()获取一个数值,接着第二次使用nextLine()获取一个字符串,那么第一次输入完按下Enter键,这个Enter键并不像我们想像中的只代表输入结束而消失,它实际上会把这个也当成一个字符传给nextLine()方法,而nextLine()是以Enter键作为结束的标志,所以会直接结束。
这就会造成一个后果:第一次输入完后按下Enter键程序就直接结束了,不给你输入第二次的机会。
解决方法:将所有的类型都看成String类型获取,最后再转为相应类型。