Scanner类的关系

1.继承关系

public final class Scanner
extends Object
implements Iterator<String>, Closeable

一个简单的文本扫描器,可以使用正则表达式解析原始类型和字符串。Scanner使用分隔符模式将其输入打破令牌,默认情况下匹配空格。 然后可以使用各种next方法将得到的令牌转换成不同类型的值。

常见问题

1.Scanner常见混淆

好多人其实不能区分next(),nextLine()等的区别,这个我以我自己的理解解释一下:

(1)next()

其实,Scanner默认输入时以空格结束输入,比如说我们经常用的next():

对输入有效字符之前遇到的空格键、Tab键或Enter键等结束符,next()方法会自动将其去掉,即next不会读取有效字符之前的空格、回车等字符,但是输入有效字符后,next()方法会将其后输入的空格键、Tab键或Enter键等视为结束符。

(2)next Line()
而nextLine会读取任意字符:
会读取空格、回车等字符,nextLine()方法的结束符只是Enter键。
当nextLine()前面有next()方法时,nextLine()会读取到被next()去掉的Enter而结束自己的读取

2.Scanner的输入分隔

其实,Scanner默认分隔是空格,但是,有时我们要用其他的符号进行分隔,我们该怎么办呢?

接下来,看一个实例:

import java.util.*;
public class try04 {
    public static void main(String[] args) {
        String input = "1 fish 2 fish red fish blue fish";
        Scanner s=new Scanner(input).useDelimiter("\\sfish\\s");
        System.out.println(s.nextInt());
        System.out.println(s.nextInt());
        System.out.println(s.next());
        System.out.println(s.next());
        s.close();
    }
}

输出结果:

找不到类RedisStoreClient_分隔符

 如果你要用不一样的分隔符,你可以用seDelimiter()方法进行分隔。

下面,用正则表达式进行分隔:

import java.util.regex.MatchResult;
public class try04 {
    public static void main(String[] args) {
        String input = "1 fish 2 fish red fish blue fish";
        Scanner s = new Scanner(input);
        s.findInLine("(\\d+) fish (\\d+) fish (\\w+) fish (\\w+)");
        MatchResult result = s.match();
        for (int i=1; i<=result.groupCount(); i++)
            System.out.println(result.group(i));
        s.close();
    }
}

输出结果:

找不到类RedisStoreClient_分隔符_02

 

Scanner方法

Scanner的方法

Modifier and Type

方法

描述

1

void

close()

关闭此扫描仪。

2

Pattern

delimiter()

返回 Pattern这个 Scanner当前用于匹配分隔符。

3

Stream<MatchResult>

findAll(String

返回与提供的模式字符串相匹配的匹配结果流。

4

Stream<MatchResult>

findAll(Pattern

返回此扫描仪的匹配结果流。

5

String

findInLine(String

尝试查找从指定字符串构造的模式的下一个出现,忽略分隔符。

6

String

findInLine(Pattern

尝试找到忽略分隔符的指定模式的下一个出现。

7

String

findWithinHorizon(String

尝试查找从指定字符串构造的模式的下一个出现,忽略分隔符。

8

String

findWithinHorizon(Pattern

尝试找到指定模式的下一个出现。

9

boolean

hasNext()

如果此扫描仪在其输入中有另一个令牌,则返回true。

10

boolean

hasNext(String

如果下一个令牌匹配从指定字符串构造的模式,则返回true。

11

boolean

hasNext(Pattern

如果下一个完整的令牌匹配指定的模式,则返回true。

12

boolean

hasNextBigDecimal()

如果此扫描仪输入中的下一个标记可以使用 nextBigDecimal()方法解释为 BigDecimal则返回true。

13

boolean

hasNextBigInteger()

如果此扫描仪输入中的下一个标记可以使用 nextBigInteger()方法将其解释为默认基数中的 BigInteger ,则返回true。

14

boolean

hasNextBigInteger(int radix)

如果此扫描仪输入中的下一个标记可以使用 nextBigInteger()方法将其解释为指定基数中的 BigInteger ,则返回true。

15

boolean

hasNextBoolean()

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

16

boolean

hasNextByte()

如果此扫描仪输入中的下一个标记可以使用 nextByte()方法将其解释为默认基数中的字节值,则返回true。

17

boolean

hasNextByte(int radix)

如果此扫描仪输入中的下一个标记可以使用 nextByte()方法将其解释为指定基数中的字节值,则返回true。

18

boolean

hasNextDouble()

如果该扫描仪输入中的下一个标记可以使用 nextDouble()方法将其解释为双重值,则返回true。

19

boolean

hasNextFloat()

如果此扫描仪输入中的下一个标记可以使用 nextFloat()方法将其解释为浮点值,则返回true。

20

boolean

hasNextInt()

如果此扫描仪输入中的下一个标记可以使用 nextInt()方法将其解释为默认基数中的int值,则返回true。

21

boolean

hasNextInt(int radix)

如果扫描仪的输入中的下一个标记可以使用 nextInt()方法解释为指定基数中的int值,则返回true。

22

boolean

hasNextLine()

如果扫描仪的输入中有另一行,则返回true。

23

boolean

hasNextLong()

如果此扫描仪的输入中的下一个令牌可以使用 nextLong()方法将其解释为默认基数中的长值,则返回true。

24

boolean

hasNextLong(int radix)

如果此扫描仪输入中的下一个标记可以使用 nextLong()方法将其解释为指定基数中的长 整型值,则返回true。

25

boolean

hasNextShort()

如果此扫描仪输入中的下一个标记可以使用 nextShort()方法将其解释为默认基数中的一个短值,则返回true。

26

boolean

hasNextShort(int radix)

如果此扫描仪输入中的下一个标记可以使用 nextShort()方法将其解释为指定基数中的一个短值,则返回true。

27

IOException

ioException()

返回 IOException最后通过此抛出 Scanner的基本 Readable

28

Locale

locale()

返回此扫描仪的区域设置。

29

MatchResult

match()

返回此扫描仪执行的最后扫描操作的匹配结果。

30

String

next()

查找并返回此扫描仪的下一个完整令牌。

31

String

next(String

如果匹配从指定字符串构造的模式,则返回下一个令牌。

32

String

next(Pattern

如果匹配指定的模式,则返回下一个令牌。

33

BigDecimal

nextBigDecimal()

将输入的下一个标记扫描为BigDecimal 。

34

BigInteger

nextBigInteger()

将输入的下一个标记扫描为BigInteger 。

35

BigInteger

nextBigInteger(int radix)

将输入的下一个标记扫描为BigInteger 。

36

boolean

nextBoolean()

将输入的下一个标记扫描为布尔值,并返回该值。

37

byte

nextByte()

将输入的下一个标记扫描为 byte

38

byte

nextByte(int radix)

将输入的下一个标记扫描为 byte

39

double

nextDouble()

将输入的下一个标记扫描为 double

40

float

nextFloat()

将输入的下一个标记扫描为 float

41

int

nextInt()

将输入的下一个标记扫描为 int

42

int

nextInt(int radix)

将输入的下一个标记扫描为 int

43

String

nextLine()

将此扫描仪推进到当前行并返回跳过的输入。

44

long

nextLong()

将输入的下一个标记扫描为 long

45

long

nextLong(int radix)

将输入的下一个标记扫描为 long

46

short

nextShort()

将输入的下一个标记扫描为 short

47

short

nextShort(int radix)

将输入的下一个标记扫描为 short

48

int

radix()

返回此扫描仪的默认基数。

49

void

remove()

Iterator的此实现不支持删除操作。

50

Scanner

reset()

重设此扫描仪。

51

Scanner

skip(String

跳过与指定字符串构成的模式匹配的输入。

52

Scanner

skip(Pattern

跳过与指定模式匹配的输入,忽略分隔符。

53

Stream<String>

tokens()

从此扫描仪返回一个分隔符的分隔符号流。

54

String

toString()

返回此 Scanner的字符串表示 Scanner

55

Scanner

useDelimiter(String

将此扫描仪的分隔模式设置为从指定的 String构造的模式。

56

Scanner

useDelimiter(Pattern

将此扫描仪的分隔模式设置为指定的模式。

57

Scanner

useLocale(Locale

将此扫描仪的区域设置设置为指定的区域设置。

58

Scanner

useRadix(int radix)

将此扫描仪的默认基数设置为指定的基数