java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入。
创建 Scanner 对象的基本语法:
- 第一步:导包
- import java.util.Scanner;
- 第二步:创建一个Scanner的对象(sc是对象名,可以改)
- Scanner sc = new Scanner(System.in);
- 第三步:录入数据
- int x = sc.nextInt();
字符串输入
通过 Scanner 类的 next() 与 nextLine() 方法获取输入的字符串
完整代码演示:
import java.util.Scanner;//导入包
public class Dome {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);// 从键盘接收数据
String x = sc.next();// next方式接收字符串
System.out.println(x);
}
}
int,float,double,long的输入
int x = sc.nextInt();
float x = sc.nextFloat();
double x = sc.nextDouble();
long x = sc.nextLong();
next()方法
next()方法查找并返回来自此扫描器的下一个完整标记。切记,只读取输入直到空格。
具体示例如下:
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个字符串");
String str = scanner.next();
System.out.println("您输入的字符串为:" + str);
}
打印如下:
请输入一个字符串
bug
您输入的字符串为:bug
请输入一个字符串
adad dada dsada2
您输入的字符串为:adad
总而言之,示例2你们是看到了其空格所带来的问题,它不能读取由两个空格隔开的字符,next方法只读取空格之前的数据,并且光标指向本行。
nextLine()方法
上方讲解完了next方法,接着就我就给大家讲一下其nextLine()方法,其方法是返回输入源中下一行的所有内容。
具体示例如下:
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个字符串");
String str = scanner.nextLine();
System.out.println("您输入的字符串为:" + str);
}
打印如下:
请输入一个字符串
abcd 123 hhhh
您输入的字符串为:abcd 123 hhhh
很明显, 对于next方法而言,nextLine方法是能完整读取到改行的所有内容,包括空格等,它是直接读到行尾才结束,然后回车,光标是直接定位到下一行。
next() 与 nextLine() 区别
next():
- 1、一定要读取到有效字符后才可以结束输入。
- 2、对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
- 3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
- next() 不能得到带有空格的字符串。
nextLine():
- 1、以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。
- 2、可以获得空白。
实例
给你们模拟一个场景,如何如何监听用户输入为日期格式的有效数据?对于这么个小的单元测试,我觉得你们大家肯定都能轻松写上来,唯独可能就是需要校验日期格式,因为如何匹配,给大家个参考,可以使用这个方法,hasNext(String pattern)
,其中pattern参数支持传入一个正则表达式,其中对于yyyy-MM-dd的日期格式正则写法为:[ ^\\d{4}-\\d{2}-\\d{2}$
]。
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个日期格式为:yyyy-MM-dd的字符串:");
//判读输入格式是否为指定的日期格式
if (scanner.hasNext("^\\d{4}-\\d{2}-\\d{2}$")) {
System.out.println("输入的日期为:"+scanner.next());
}else {
System.out.println("输入的日期格式错误!");
}
}
接下来我们来测试验证一下:
请输入一个日期格式为:yyyy-MM-dd的字符串:
1
输入的日期格式错误!
请输入一个日期格式为:yyyy-MM-dd的字符串:
2022-06-29
输入的日期为:2022-06-29