首先,java.util.Scanner 作为Java5及之后的新特征,其常用于控制台输入,在此我分享一点个人的相关理解。
想要通过控制台进行输入,首先需要构造一个Scanner对象,并与“标准输入流”System.in关联。
Scanner scan = new Scanner(System.in);
注:请认真阅读下面的解释,再对比后面代码食用效果更佳
hasNext() 判断扫描器中当前扫描位置后是否还存在下一段。
hasNextLine() 如果在此扫描器的输入中存在另一行,则返回 true。
next() 查找并返回来自此扫描器的下一个完整标记(String)。
nextLine() 此扫描器执行当前行,并返回跳过的输入信息。
delimiter() 返回Scanner当前正用于匹配分隔符的pattern。
nextInt()读取整数,通过hasnextInt进行判断,同nextDouble(),nextFloat()等用法相同。
咱们再来看一个实例:
代码注释中特别解释了next()与nextline()第一个区别,结合上面各函数的定义更容易理解。
public class ScannerDemo {
public static void main(String []args){
Scanner scan = new Scanner(System.in);
System.out.println("请输入一个整数:");
while(scan.hasNextInt()){
int num = scan.nextInt();
System.out.println("请输入一个字符串:");
String str = scan.next();
// String str = scan.nextLine();
// 区别于next(),如果此处使用nextline(),则str会直接接收一个换行符。
// 因为上方的nextInt只是读取本行的int数据,而并不将“行指针”指向下一行,所以nextline只能接收到数字输入完成后的换行符。
System.out.println("number="+num+",string="+str);
System.out.println(scan.delimiter());
scan.close();
break;
}
}
}
运行结果如下:
请输入一个整数:
1325
请输入一个字符串:
smile
number=1325,string=smile
\p{javaWhitespace}+
我们再来看看next()与nextline()第二个区别:
public class ScannerDemo {
public static void main(String []args){
Scanner scan = new Scanner(System.in);
System.out.println("请输入一个字符串:");
while(scan.hasNext()){
String str0 = scan.nextLine(); //先是nextLIne
System.out.println("请再次输入一个字符串:");
String str1 = scan.next(); //再是next()
System.out.println("str0 = "+str0+" ; str1 = "+str1);
scan.close();
break;
}
}
}
运行结果如下:
请输入一个字符串:
smile dogge and happy catty
请再次输入一个字符串:
you are my sunshine
str0 = smile dogge and happy catty ; str1 = you
即:
next()接收字符串时,以空格或者换行符作为结尾
而nextLine可以接受空格作为字符串的一部分,只以换行符作为结尾。
通过上面的实例及代码注释,配合下面的函数讲解,我们可以认识到Scanner常用函数的使用方法。
多多练习才是正道,开始敲代码吧~