本文概述
Java的Scanner类可在java.util包中找到。 Java提供了多种从键盘读取输入的方法, java.util.Scanner类就是其中之一。
Java Scanner类使用默认为空格的定界符将输入分为令牌。它提供了许多读取和解析各种原始值的方法。
Java Scanner类广泛用于使用正则表达式解析文本以获取字符串和原始类型。这是在Java中获取输入的最简单方法。借助Java中的Scanner, 我们可以从用户那里获取基本类型的输入, 例如int, long, double, byte, float, short等。
Java Scanner类扩展了Object类, 并实现了Iterator和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扫描仪
为了获得从用户读取输入的Java Scanner实例, 我们需要在Scanner类的构造函数中传递输入流(System.in)。例如:
Scanner in = new Scanner(System.in);
要获取解析字符串的Java Scanner实例, 我们需要在Scanner类的构造函数中传递字符串。例如:
Scanner in = new Scanner("Hello srcmini");
Java扫描器类构造函数
序号 | 建设者 | 描述 |
---|---|---|
1) | Scanner(File source) | 它构造一个新的扫描仪, 该扫描仪生成从指定文件扫描的值。 |
2) | Scanner(File source, String charsetName) | 它构造一个新的扫描仪, 该扫描仪生成从指定文件扫描的值。 |
3) | Scanner(InputStream source) | 它构造一个新的Scanner, 该扫描器生成从指定输入流中扫描的值。 |
4) | Scanner(InputStream source, String charsetName) | 它构造一个新的Scanner, 该扫描器生成从指定输入流中扫描的值。 |
5) | Scanner(Readable source) | 它构造一个新的扫描仪, 该扫描仪生成从指定来源扫描的值。 |
6) | Scanner(String source) | 它构造一个新的Scanner, 该扫描器生成从指定字符串扫描的值。 |
7) | Scanner(ReadableByteChannel source) | 它构造一个新的扫描仪, 该扫描仪生成从指定通道扫描的值。 |
8) | Scanner(ReadableByteChannel source, String charsetName) | 它构造一个新的扫描仪, 该扫描仪生成从指定通道扫描的值。 |
9) | Scanner(Path source) | 它构造一个新的扫描仪, 该扫描仪生成从指定文件扫描的值。 |
10) | Scanner(Path source, String charsetName) | 它构造一个新的扫描仪, 该扫描仪生成从指定文件扫描的值。 |
Java Scanner类方法
以下是扫描仪方法的列表:
序号 | 编辑并输入 | 方法 | 描述 |
---|---|---|---|
1) | void | close() | 用于关闭该扫描仪。 |
2) | pattern | delimiter() | 它用于获取Scanner类当前用于匹配定界符的Pattern。 |
3) | Stream<MatchResult> | findAll() | 它用于查找与提供的模式字符串匹配的匹配结果流。 |
4) | String | findInLine() | 它用于查找由指定字符串构造的模式的下一次出现, 而忽略定界符。 |
5) | string | findWithinHorizon() | 它用于查找由指定字符串构造的模式的下一次出现, 而忽略定界符。 |
6) | boolean | hasNext() | 如果此扫描程序的输入中包含另一个令牌, 则返回true。 |
7) | boolean | hasNextBigDecimal() | 它用于检查是否可以使用nextBigDecimal()方法将此扫描程序输入中的下一个标记解释为BigDecimal。 |
8) | boolean | hasNextBigInteger() | 它用于检查是否可以使用nextBigDecimal()方法将此扫描程序输入中的下一个标记解释为BigDecimal。 |
9) | boolean | hasNextBoolean() | 它用于检查是否可以使用nextBoolean()方法将此扫描程序输入中的下一个标记解释为布尔值。 |
10) | boolean | hasNextByte() | 它用于检查是否可以使用nextBigDecimal()方法将此扫描程序输入中的下一个标记解释为Byte。 |
11) | boolean | hasNextDouble() | 它用于检查是否可以使用nextByte()方法将此扫描程序输入中的下一个标记解释为BigDecimal。 |
12) | boolean | hasNextFloat() | 它用于检查是否可以使用nextFloat()方法将此扫描程序输入中的下一个标记解释为Float。 |
13) | boolean | hasNextInt() | 它用于检查使用nextInt()方法是否可以将此扫描器输入中的下一个标记解释为int。 |
14) | boolean | hasNextLine() | 用于检查此扫描仪输入中是否还有另一行。 |
15) | boolean | hasNextLong() | 它用于检查使用nextLong()方法是否可以将此扫描程序输入中的下一个标记解释为Long。 |
16) | boolean | hasNextShort() | 它用于检查是否可以使用nextShort()方法将此扫描程序输入中的下一个标记解释为Short。 |
17) | IOException | ioException() | 它用于获取此Scanner的可读性最后抛出的IOException。 |
18) | Locale | locale() | 它用于获取Scanner类的语言环境。 |
19) | MatchResult | match() | 用于获取此扫描仪上次扫描操作的匹配结果。 |
20) | String | next() | 它用于从正在使用的扫描仪中获取下一个完整令牌。 |
21) | BigDecimal | nextBigDecimal() | 它将输入的下一个令牌扫描为BigDecimal。 |
22) | BigInteger | nextBigInteger() | 它将输入的下一个标记扫描为BigInteger。 |
23) | boolean | nextBoolean() | 它将输入的下一个标记扫描为布尔值并返回该值。 |
24) | byte | nextByte() | 它将输入的下一个令牌扫描为一个字节。 |
25) | double | nextDouble() | 它将输入的下一个标记扫描为双精度。 |
26) | float | nextFloat() | 它以浮点形式扫描输入的下一个标记。 |
27) | int | nextInt() | 它将输入的下一个标记扫描为Int。 |
28) | String | nextLine() | 它用于获取跳过了Scanner对象的输入字符串。 |
29) | long | nextLong() | 它扫描输入的下一个令牌很长。 |
30) | short | nextShort() | 它将输入的下一个令牌扫描为short。 |
31) | int | radix() | 它用于获取扫描仪使用的默认基数。 |
32) | void | remove() | 当Iterator的此实现不支持remove操作时, 将使用它。 |
33) | Scanner | reset() | 用于重置正在使用的扫描仪。 |
34) | Scanner | skip() | 跳过与指定模式匹配的输入, 忽略定界符 |
35) | Stream<String> | tokens() | 它用于从正在使用的Scanner对象中获取由定界符分隔的标记流。 |
36) | String | toString() | 它用于获取Scanner使用的字符串表示形式。 |
37) | Scanner | useDelimiter() | 用于将正在使用的扫描仪的定界图案设置为指定的图案。 |
38) | Scanner | useLocale() | 它用于将此扫描程序的语言环境对象设置为指定的语言环境。 |
39) | 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 srcmini.";
//Create scanner Object and pass string in it
Scanner scan = new Scanner(s);
//Check if the scanner has a token
System.out.println("Boolean Result: " + scan.hasNext());
//Print the string
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 srcmini.
-------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 srcmini/My name is Abhishek.";
//Create scanner with the specified String Object
Scanner scanner = new Scanner(str);
System.out.println("Boolean Result: "+scanner.hasNextBoolean());
//Change the delimiter of this scanner
scanner.useDelimiter("/");
//Printing the tokenized Strings
System.out.println("---Tokenizes String---");
while(scanner.hasNext()){
System.out.println(scanner.next());
}
//Display the new delimiter
System.out.println("Delimiter used: " +scanner.delimiter());
scanner.close();
}
}
输出:
Boolean Result: false
---Tokenizes String---
Hello
This is srcmini
My name is Abhishek.
Delimiter used: /
评论前必须登录!
注册