Java Scanner
Java Scanner类可在java.util软件包中找到。 Java提供了多种从键盘读取输入的方式,java.util.Scanner类是其中的一种。
Java Scanner类使用分隔符将输入分为令牌,默认情况下,该分隔符为空格。它提供了许多读取和解析各种原始值的方法。
Java Scanner类广泛用于使用正则表达式解析文本以获取字符串和原始类型。这是在Java中获取输入的最简单方法。借助于Java中的Scanner,我们可以从用户那里获取基本类型的输入,例如int,long,double,byte,float,short等。
Java Scanner类扩展了Object类并实现迭代器和Closeable接口。
Java Scanner类提供nextXXX()方法以返回值的类型,例如nextInt(),nextByte(),nextShort(),next(),nextLine(),nextDouble(),nextFloat(),nextBoolean()等。要从扫描仪获取单个字符,可以调用next()。charAt(0)方法,该方法返回单个字符。
Java扫描程序类声明
public final class Scanner extends Object implements Iterator<String>
如何获取Java Scanner
要获取从用户读取输入的Java Scanner实例,我们需要在构造函数中传递输入流(System.in)扫描程序类。例如:
Scanner in = new Scanner(System.in);
要获取解析字符串的Java Scanner实例,我们需要在Scanner类的构造函数中传递字符串。例如:
Scanner in = new Scanner("Hello lidihuo");
Java扫描程序类构造器
构造函数 |
说明 |
Scanner(File source) |
它构造了一个新的扫描仪,该扫描仪生成从指定文件扫描的值。 |
Scanner(File source, String charsetName) |
它构造了一个新的扫描仪,该扫描仪生成从指定文件扫描的值。 |
Scanner(InputStream source) |
它构造了一个新的扫描仪,该扫描仪生成从指定输入流中扫描的值。 |
Scanner(InputStream source, String charsetName) |
它构造了一个新的扫描仪,该扫描仪生成从指定输入流中扫描的值。 |
Scanner(Readable source) |
它构造了一个新的扫描仪,该扫描仪生成从指定来源扫描的值。 |
Scanner(String source) |
它构造了一个新的扫描仪,该扫描仪生成从指定字符串扫描的值。 |
Scanner(ReadableByteChannel source) |
它构造了一个新的扫描仪,该扫描仪产生从指定通道扫描的值。 |
Scanner(ReadableByteChannel source, String charsetName) |
它构造了一个新的扫描仪,该扫描仪生成从指定通道扫描的值。 |
Scanner(Path source) |
它构造了一个新的扫描仪,该扫描仪生成从指定文件扫描的值。 |
Scanner(Path source, String charsetName) |
它构造了一个新的扫描仪,该扫描仪生成从指定文件扫描的值。 |
Java扫描仪类方法
以下是扫描仪方法的列表:
修饰符和类型 |
方法 |
说明 |
void |
close() |
它用于关闭该扫描仪。 |
pattern |
delimiter() |
用于获取Scanner类当前用于匹配定界符的Pattern。 |
Stream <MatchResult> |
findAll() |
它用于查找与提供的模式字符串匹配的匹配结果流。 |
String |
findInLine() |
它用于查找由指定字符串构造的模式的下一次出现,而忽略定界符。 |
string |
findWithinHorizon() |
它用于查找下一个根据指定字符串构造的模式而忽略分隔符的情况。 |
boolean |
hasNext() |
如果该扫描仪的输入中包含另一个令牌,则返回true。 |
boolean |
hasNextBigDecimal() |
它用于检查是否可以使用nextBigDecimal()方法将此扫描程序输入中的下一个标记解释为BigDecimal。 |
boolean |
hasNextBigInteger() |
它用于检查是否可以使用nextBigDecimal()方法将此扫描程序输入中的下一个标记解释为BigDecimal。 |
boolean |
hasNextBoolean() |
它用于检查是否可以使用nextBoolean()方法将此扫描程序输入中的下一个标记解释为布尔值。 |
boolean |
hasNextByte() |
它用于检查是否可以使用nextBigDecimal()方法将此扫描程序输入中的下一个标记解释为字节。 |
boolean |
hasNextDouble() |
它用于检查是否可以使用nextByte()方法将此扫描程序输入中的下一个标记解释为BigDecimal。 |
boolean |
hasNextFloat() |
用于检查是否可以使用nextFloat()方法将此扫描程序输入中的下一个标记解释为Float。 |
boolean |
hasNextInt() |
它用于检查此扫描程序输入中的下一个标记是否可以使用nextInt()方法解释为int。 |
boolean |
hasNextLine() |
它用于检查此扫描仪输入中是否还有另一行。 |
boolean |
hasNextLong() |
它用于检查使用nextLong()方法是否可以将此扫描仪输入中的下一个标记解释为Long。 |
boolean |
hasNextShort() |
它用于检查使用nextShort()方法是否可以将此扫描仪输入中的下一个标记解释为Short。 |
IOException |
ioException() |
它用于获取此扫描程序的可读性最后抛出的IOException。 |
Locale |
locale() |
它用于获取Scanner类的语言环境。 |
MatchResult |
match() |
它用于获取此扫描仪上次扫描操作的匹配结果。 |
String |
next() |
它用于从正在使用的扫描仪中获取下一个完整令牌。 |
BigDecimal |
nextBigDecimal() |
它将输入的下一个令牌扫描为BigDecimal。 |
BigInteger |
nextBigInteger() |
它将输入的下一个标记扫描为BigInteger。 |
boolean |
nextBoolean() |
它将输入的下一个标记扫描为布尔值并返回该值。 |
byte |
nextByte() |
它扫描输入的下一个令牌作为字节。 |
double |
nextDouble() |
它将输入的下一个标记扫描为双精度。 |
float |
nextFloat() |
它以浮点数扫描输入的下一个标记。 |
int |
nextInt() |
它将输入的下一个标记扫描为Int。 |
String |
nextLine() |
它用于获取Scanner对象跳过的输入字符串。 |
long |
nextLong() |
它将扫描输入的下一个令牌很长时间。 |
short |
nextShort() |
它扫描输入的下一个令牌作为short。 |
int |
radix() |
它用于获取扫描仪使用的默认基数。 |
void |
remove() |
当此Iterator实现不支持删除操作时使用。 |
Scanner |
reset() |
它用于重置正在使用的扫描仪。 |
Scanner |
skip() |
它将跳过与指定模式匹配的输入,而忽略定界符 |
Stream<String> |
tokens() |
它用于从正在使用的Scanner对象中获取由定界符分隔的标记流。 |
String |
toString() |
它用于使用来获取Scanner的字符串表示形式。 |
Scanner |
useDelimiter() |
用于将正在使用的扫描仪的定界图案设置为指定的图案。 |
Scanner |
useLocale() |
用于将扫描仪的语言环境对象设置为指定的语言环境。 |
Scanner |
useRadix() |
用于将正在使用的扫描仪的默认基数设置为指定基数。 |
示例1
让我们看一个简单的Java扫描仪示例,我们从用户那里获得单个输入。在这里,我们通过in.nextLine()方法请求一个字符串。
import java.util.*;
public class ScannerExample {
public static void main(String args[]){
Scanner in = new Scanner(System.in);
System.out.print("Enter your name: ");
String name = in.nextLine();
System.out.println("Name is: " + name);
in.close();
}
}
输出:
Enter your name: sonoo jaiswal
Name is: sonoo jaiswal
示例2
import java.util.*;
public class ScannerClassExample1 {
public static void main(String args[]){
String s = "Hello, this is lidihuo.";
Scanner scan = new Scanner(s);
System.out.println("Boolean Result: " + scan.hasNext());
System.out.println("String: " +scan.nextLine());
scan.close();
System.out.println("--------Enter Your Details-------- ");
Scanner in = new Scanner(System.in);
System.out.print("Enter your name: ");
String name = in.next();
System.out.println("Name: " + name);
System.out.print("Enter your age: ");
int i = in.nextInt();
System.out.println("Age: " + i);
System.out.print("Enter your salary: ");
double d = in.nextDouble();
System.out.println("Salary: " + d);
in.close();
}
}
输出:
Boolean Result: true
String: Hello, This is lidihuo.
-------Enter Your Details---------
Enter your name: Abhishek
Name: Abhishek
Enter your age: 23
Age: 23
Enter your salary: 25000
Salary: 25000.0
示例3
import java.util.*;
public class ScannerClassExample2 {
public static void main(String args[]){
String str = "Hello/this is lidihuo/My name is Abhishek.";
Scanner scanner = new Scanner(str);
System.out.println("Boolean Result: "+scanner.hasNextBoolean());
scanner.useDelimiter("/");
System.out.println("---Tokenizes String---");
while(scanner.hasNext()){
System.out.println(scanner.next());
}
System.out.println("Delimiter used: " +scanner.delimiter());
scanner.close();
}
}
输出:
Boolean Result: false
---Tokenizes String---
Hello
This is lidihuo
My name is Abhishek.
Delimiter used: /