利用Scanner类从键盘输入的用法
1.使用步骤:
首先要构造一个Scanner对象并与“ 标准输人流” System.in 关联,然后利用Scanner类的方法从键盘上输入数据。
2.Scanner类的常用方法
(1)nextLine()
用法:
此方法结构为
String nextLine();
作用是读取一行数据,并以字符串的形式返回。
示例:
import java.util.Scanner;//要使用Scanner的方法此句不可省略,类似于C语言中的include包含头文件
public class InputTest{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);//创建Scanner对象
String name = sc.nextLine();//利用Scanner的nexrLine方法输入一行数据作为名字
System.out.println(name);
}
}
//输入:Jake Rose
//输出:Jake Rose
(2)next()
用法:
此方法结构为
String next();
作用是读取一个单词
示例:
import java.util.Scanner;
public class InputTest{
public static void main(String[] args){
Scanner in = new Scanner(System.in);//创建Scanner对象
String word = in.next();//利用Scanner的nexr方法输入一个单词
System.out.println(word);
}
}
//输入:you are a pig
//输出:you
(3)nextInt()
用法:
此方法结构为
int nextInt();
作用是读取一个数字,如果输入的不是数字则会报错
示例:
import java.util.Scanner;
public class InputTest{
public static void main(String[] args){
Scanner in = new Scanner(System.in);//创建Scanner对象
int a = in.nextInt();//利用Scanner的nexrInt方法输入一个单词
System.out.println(a);
}
}
//输入: 1 2
//输出:1
此外还有nextFloat()和nextDouble()方法也比较常用,用法与nextInt相似,都是读取一个数据只是数据类型不同,这里就不做具体介绍了。这两个方法的声明如下:
Double nextDouble();
Float nextFloat();
(4)hasNext()
此方法结构为
boolean hasNext();
作用是检测是否还有输入的数据的,如果没有实参且有数据输入则返回true,否则程序暂停,等待输入。如果有实参,那么当输入的数据等于实参时返回true否则返回false,有实参时的方法实际上是该方法的重载。
示例:此方法用于多次输入
public class demon1 {
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
while(!sc.hasNext("#"))//如果输入的是#则返回true否则返回flase
{
System.out.println(sc.next());
}
}
此外还有hasNextInt、hasNextDouble等等方法与此方法作用和用法类似在此就不做介绍了。
3.注意事项
Java中也存在着类似于C语言的吃回车现象——当在上一次输入完成按下回车后下一次输入还未进行就结束了()。这种情况通常是在使用了Scanner类中的nextxxxx()方法(除了nextLine()方法以外的)之后,在其下使用了一个nextLine()方法。由于除了nextLine()方法以外的该类下的输入方法都会舍弃回车符,当发生上面的情况的时候,标志着上一次输入完成的回车符会被紧接着的nextLine方法吸收完成其自身的一次输入。
解决方法:
1.把nextLine()方法换成next()方法:
在这之前应先了解一下这两个方法的区别,nextLine方法是读取一行数据,这行数据以回车符结尾,并把回车符从输入流中清除,这个回车符并不会被读入字符串中。
而next方法是读取一串数据,这串数据会把自动跳过第一个有效字符出现前的所有的非有效字符并读取到有效字符后的第一个非有效字符之前。这里说的非有效字符是空格、回车、TAB。
方法现在介绍完成现在开始叙述解决方案:如果把nextLine换为next,就会吧上一个输入留下的回车视为非有效字符略过,需要再次输入有效字符才行。
2.在用nextLine读取之前先用一个nextLine把回车吃掉