前言
在做某些算法的时候,输入输出样例是最好的方式,通过debug断点一个个尝试
为此了解Scanner类很有必要
关于Scanner的函数有多个
而其中有必要了解的几个,下面分别会一一阐述
1. next() 和 nextLine()
两者都是接收用户的输入
但是区别在于
next()
从第一个有效字符开始 碰到空格或者换行符就会停止获取nextLine()
遇到回车键的时候就会停止获取
举个简单的例子
如果输入123 456 789
Scanner sc = new Scanner(System.in);
System.out.println(sc.next());//123
System.out.println(sc.nextLine());// 456 789
截图如下:
2. hasNext() 和 hasNextLine()
hasNext()
判断是否有非空字符,返回的类型为BooleanhasNextLine()
根绝行匹配规则判断是否有下一行(包括空行),返回的类型为Boolean
如果输入一行的数据。如果输入为hasNext() 之后遇到换行符就会结束输入的标志;如果输入为hasNextLine() 之后遇到换行符,但是下一行为空,会一直阻塞,输入流会出错。
—实战显示—
通常在acm模式的代码、各个大公司的笔试、代码测试的调优等都会看到这种输入输出的格式等
为了进一步加深印象,可以通过如下加深印象
关于这部分实战内容可参考如下文章
笔试题 Java的输入输出
单行输入
经常会看到一些笔试题,让你输入一个数组,后面跟着输入的变量个数,可以通过hasNext函数(遇到换行符就结束)以及nextInt函数获取(遇到空格就结束)
Scanner sc = new Scanner(System.in);
while(sc.hasNext()) {
int n = sc.nextInt();
int[] nums = new int[n];
for(int i = 0; i < n; i++) {
nums[i] = in.nextInt(); // 读入数组元素
}
}
多行输入的显示也可这样输出
比如某公司的笔试题
输入一个用户名的个数,用户名为全英文字母,且必须是6-12个
不满足的情况下对应输出相对应的提示
import java.util.*;
public class test {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
Set<String> set = new HashSet<>();
//次数
int t = in.nextInt();
in.nextLine();
for (int i = 0; i < t; i++) {
String s1 = in.nextLine();
if (s1.length() < 6 || s1.length() > 12) {
System.out.println("illegal length");
continue;
}
for (int j = 0; j < s1.length(); j++) {
if(!Character.isLetter(s1.charAt(j))){
System.out.println("illegal charactor");
break;
}
}
if (set.contains(s1)) {
System.out.println("acount existed");
}else{
set.add(s1);
System.out.println("registration complete");
}
}
}
}