当前位置: 首页 > 教程 > Java IO流 >

Java Scanner

精华
小牛编辑
123浏览
2023-03-14

1 什么是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类,并实现了IteratorCloseable接口。

Java Scanner类提供nextXXX() 方法以返回值的类型,例如nextInt(),nextByte(),nextShort(),next(),nextLine(),nextDouble(),nextFloat(),nextBoolean()等。要从Scanner获取单个字符,可以调用next()。charAt(0)方法,该方法返回单个字符。

2 Java Scanner的语法

public final class Scanner  
          extends Object  
          implements Iterator<String>   

3 如何获取Scanner对象

要获取从用户读取输入的Java Scanner实例,我们需要在Scanner类的构造函数中传递输入流(System.in)。例如:

Scanner in = new Scanner(System.in);  

要获取解析字符串的Java Scanner实例,我们需要在Scanner类的构造函数中传递字符串。例如:

Scanner in = new Scanner("Hello Yiidian");  

4 Java Scanner的构造方法

构造方法 描述
Scanner(File source) 构造一个新的Scanner,该Scanner生成从指定文件扫描的值。
Scanner(File source, String charsetName) 构造一个新的Scanner,该Scanner生成从指定文件扫描的值。
Scanner(InputStream source) 构造一个新的Scanner,该Scanner生成从指定输入流中扫描的值。
Scanner(InputStream source, String charsetName) 构造一个新的Scanner,该Scanner生成从指定输入流中扫描的值。
Scanner(Readable source) 构造一个新的Scanner,该Scanner生成从指定来源扫描的值。
Scanner(String source) 构造一个新的Scanner,该Scanner生成从指定字符串扫描的值。
Scanner(ReadableByteChannel source) 构造一个新的Scanner,该Scanner生成从指定通道扫描的值。
Scanner(ReadableByteChannel source, String charsetName) 构造一个新的Scanner,该Scanner生成从指定通道扫描的值。
Scanner(Path source) 构造一个新的扫描仪,该Scanner生成从指定文件扫描的值。
Scanner(Path source, String charsetName) 构造一个新的扫描仪,该Scanner生成从指定文件扫描的值。

5 Java Scanner的方法

方法 描述
void close() 此方法关闭此扫描器。
Pattern delimiter() 此方法返回当前扫描器使用相匹配的分隔符的模式。
String findInLine(Pattern pattern) 此方法试图找到指定的模式在忽略分隔符的下一次出现。
String findInLine(String pattern) 此方法试图找到从指定字符串构造的模式在未来发生,忽略分隔符。
String findWithinHorizon(Pattern pattern, int horizon) 此方法试图找到指定模式的下一次出现。
String findWithinHorizon(String pattern, int horizon) 此方法试图找到从指定字符串构造的模式在未来发生,在忽略分隔符。
boolean hasNext() 如果此扫描器有另一个标记在其输入此方法返回true。
boolean hasNext(Pattern pattern) 如果下一个完整标记与指定模式匹配,该方法返回true。
boolean hasNext(String pattern) 如果下一个标记与从指定字符串构造的模式此方法返回true。
boolean hasNextBigDecimal() 如果在此扫描器输入信息中的下一个标记可以通过使用nextBigDecimal()方法被解释为一个BigDecimal,该方法返回true。
boolean hasNextBigInteger() 如果在此扫描器输入信息中的下一个标记可以使用nextBigInteger()方法被解释为一个BigInteger的默认基数,此方法返回true。
boolean hasNextBigInteger(int radix) 如果在此扫描器输入信息中的下一个标记可以使用nextBigInteger()方法被解释为一个BigInteger指定基数此方法返回true。
boolean hasNextBoolean()

如果在此扫描器输入信息中的下一个标记可以解释为使用从字符串“true|false”创造了一个不区分大小写模式的布尔值,此方法返回true。

boolean hasNextByte() 如果在此扫描器输入信息中的下一个标记可以使用nextByte()方法被解释为一个字节值的默认基数此方法返回true。
boolean hasNextByte(int radix) 如果在此扫描器输入信息中的下一个标记可以使用nextByte()方法被解释为一个字节值指定基数,此方法返回true。
boolean hasNextDouble() 如果在此扫描器输入信息中的下一个标记可以解释为使用nextDouble()方法的一个double值,此方法返回true。
boolean hasNextFloat() 此方法返回true,如果在此扫描器输入信息的下一个标记可以使用nextFloat()方法解释为浮点值。
boolean hasNextInt() 如果在此扫描器输入信息中的下一个标记可以使用nextInt()方法被解释为一个int值的默认基数,此方法返回true。
boolean hasNextInt(int radix) 如果在此扫描器输入信息中的下一个标记可以使用nextInt()方法被解释为一个int值指定基数,此方法返回true。
boolean hasNextLine() 如果有另一行在此扫描器的输入,此方法返回true。
boolean hasNextLong() 如果在此扫描器输入信息中的下一个标记可以使用nextLong()方法被解释为一个long值的默认基数,此方法返回true。
boolean hasNextLong(int radix) 如果在此扫描器输入信息中的下一个标记可以使用nextLong()方法被解释为一个long值指定基数,此方法返回true。
boolean hasNextShort() 如果在此扫描器输入信息中的下一个标记可以使用nextShort()方法被解释为一个short值的默认基数,此方法返回true。
boolean hasNextShort(int radix) 如果在此扫描器输入信息中的下一个标记可以使用nextShort()方法被解释为一个short值指定基数,此方法返回true。
IOException ioException() 此方法返回的最后一个IOException异常抛出此扫描器的基本可读。
Locale locale() 此方法返回此扫描器的语言环境。
MatchResult match() 此方法返回此扫描器所执行的最后扫描操作的匹配结果。
String next() 此方法查找并返回来自此扫描器的下一个完整标记。
String next(Pattern pattern) 此方法返回下一个标记,如果它与指定模式匹配。
String next(String pattern) 此方法返回下一个标记,如果它匹配从指定字符串构造的模式。
BigDecimal nextBigDecimal() 此方法扫描输入的下一个标记为一个BigDecimal。
BigInteger nextBigInteger() 此方法扫描输入的下一个标记为一个BigInteger。
BigInteger nextBigInteger(int radix) 此方法扫描输入的下一个标记为一个BigInteger。
boolean nextBoolean() 此方法扫描输入的下一个标记成一个布尔值并返回该值。
byte nextByte() 此方法扫描输入的下一个标记为一个字节。
byte nextByte(int radix) 此方法扫描输入的下一个标记为一个字节。
double nextDouble() 此方法扫描输入的下一个标记为double。
float nextFloat() 此方法扫描输入的下一个标记为float。
int nextInt() 此方法扫描输入的下一个标记为int。
int nextInt(int radix) 此方法扫描输入的下一个标记为int。
String nextLine() 此方法前进此扫描器执行当前行,并返回跳过的输入信息。
long nextLong() 此方法扫描输入的下一个标记为一个long。
long nextLong(int radix) 此方法扫描输入的下一个标记为一个long。
short nextShort() 此方法扫描输入的下一个标记为一个long。
short nextShort(int radix) 此方法扫描输入的下一个标记为short。
int radix() 此方法返回此扫描器的默认基数。
void remove() 不受此实现迭代器所支持的删除操作。
Scanner reset() 此方法重置该扫描仪。
Scanner skip(Pattern pattern) 此方法跳过输入相匹配的指定模式,在忽略分隔符。
Scanner skip(String pattern) 此方法跳过输入匹配从指定字符串构造的模式。
String toString() 此方法返回当前扫描器的字符串表示形式。
Scanner useDelimiter(Pattern pattern) 此方法设置此扫描器的分隔模式,以指定的模式。
Scanner useDelimiter(String pattern) 此方法设置此扫描器的分隔模式,以从指定字符串构造的模式。
Scanner useLocale(Locale locale) 此方法设置此扫描器的语言环境,以指定的语言环境。
Scanner useRadix(int radix) 此方法设置此扫描器的默认基数为指定基数。

6 Java Scanner的例子

让我们看一个简单的Java扫描仪示例,我们从用户那里获得单个输入。通过in.nextLine()方法请求一个字符串。

package cn.xnip;

/**
 * 小牛知识库网: https://www.xnip.cn
 */
/**
 *  Java Scanner的例子
 */
import java.util.*;

public class Demo {

    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: xnip
Name is: xnip