码农小白 JAVA篇
JAVA Scanner类
1、Scanner类简介
Java 5添加了java.util.Scanner 类,这是一个用于扫描输入文本的新的实用程序。它是以前的StringTokenizer和Matcher类之间的某种结合。由于任何数据都必须通过同一模式的捕获组检索或通过使用一个索引来检索文本的各个部分。于是可以结合使用正则表达式和从输入流中检索特定类型数据项的方法。这样,除了能使用正则表达式之外,Scanner类还可以任意地对字符串和基本类型(如int和double)的数据进行分析。借助于Scanner,可以针对任何要处理的文本内容编写自定义的语法分析器。
2、Scanner类的作用
使用Scanner类可以很方便地便获取用户的键盘输入,Scanner是一个基于正则表达式的文本扫描器,它可以从文件、输入流 、字符串中解析出基本类型值和字符串值。Scanner类提供了多个构造器,不同的构造器可接受文件、输入流、字符串作为数据,用于从文件、输入流、字符串中解析数据。
3、Scanner主要提供了两个方法
- 1、hasNextXxx():是否还有下一个输入项,其中Xxx可以是Int、Long等代表基本数据类型的字符串。如果需要判断是否包含下一个字符串,可以省略Xxx
- 2、nextXxx():获取下一个输入项。Xxx的含义与前一个方法中Xxx相同。
Scanner类中提供了多个方法:
next():取得一个字符串;
nextInt():将取得的字符串转换成int类型的整数;
nextFloat():将取得的字符串转换成float型;
nextBoolean():将取得的字符串转换成boolean型;
在默认情况下,Scanner使用空白(包括空格、Tab空白、回车)作为多个输入项之间的分隔符。看下面的程序使用Scanner来获得用户的键盘输入。
方法 | 作用 |
---|---|
Scanner(File x) | 构造一个新的Scanner对象,从指定文件获取内容 |
Scanner(InputStream x) | 构造一个新的Scanner对象,从指定输入流获取内容 |
hasNext(Pattern pattern) | 判断输入的数据是否符合正则表达式,符合返回true |
hasNextLine() | 判断是否还有下一行,有返回true |
hasNextInt() | 判断输入的数据是否符合int型,符合返回true |
next(Pattern pattern) | 接收输入的内容并验证正则表达式 |
next() | 接收输入的内容,以空格作为分隔符 |
nextInt() | 接收int型数据 |
nextLong() | 接收long型数据 |
useDelimiter(String x) | 设置读取的分隔符 |
nextLine() | 读取输入的下一行内容 注意这个还可以识别空格 |
4、Scanner中next()与nextLine()的区别
next(): 读取的是一段字符,从一行中开始扫描,碰到特定的标识符如:空格或换行符,但只获取其前的有效字符(有效字符不包括空格与换行符)。
nextLine(): 以换行符为结束标志,读取的是换行符前面的字符。
import java.util.Scanner;
public class Myclass {
public static void main(String[] args) {
String s1, s2;
Scanner sc = new Scanner(System.in);
System.out.print("请输入第一个字符串:");
s1 = sc.next();
System.out.print("请输入第二个字符串:");
s2 = sc.nextLine();
System.out.println("输入的字符串是:" + s1 +"与"+ s2 );
}
}
输入aa bb(aa(空格)bb)
输出结果
请输入第一个字符串:aa bb
请输入第二个字符串:输入的字符串是:aa与 bb
- s1 和 s2 都有数据
- s1 读取了输入字符串空格前面的字符(aa)
- s2 读取了输入字符串中除 s1 外剩余换行前的字符( bb)
5、循环输入多组测试用例
import java.util.Scanner;
public class Myclass {
public static void main(String[] args) {
int n = in.nextInt(); // 该测试用例后续接收的参数个数
long[] array = new long[n];
String[] arrayStr = new String[n];
for(int i=0; i<n; i++){
arrayStr[i] = in.next();
}
for(int i=0; i<n; i++){
array[i] = in.nextLong();// 取下一个元素转换成long类型
}
}