Scanner类

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();
    }
}

输出结果:

 如果你要用不一样的分隔符,你可以用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();
    }
}

输出结果:

 

Scanner方法

Scanner的方法
Modifier and Type方法描述
1voidclose​()

关闭此扫描仪。

2Patterndelimiter​()

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

3Stream<MatchResult>findAll​(String patString)

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

4Stream<MatchResult>findAll​(Pattern pattern)

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

5StringfindInLine​(String pattern)

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

6StringfindInLine​(Pattern pattern)

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

7StringfindWithinHorizon​(String pattern, int horizon)

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

8StringfindWithinHorizon​(Pattern pattern, int horizon)

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

9booleanhasNext​()

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

10booleanhasNext​(String pattern)

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

11booleanhasNext​(Pattern pattern)

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

12booleanhasNextBigDecimal​()

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

13booleanhasNextBigInteger​()

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

14booleanhasNextBigInteger​(int radix)

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

15booleanhasNextBoolean​()

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

16booleanhasNextByte​()

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

17booleanhasNextByte​(int radix)

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

18booleanhasNextDouble​()

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

19booleanhasNextFloat​()

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

20booleanhasNextInt​()

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

21booleanhasNextInt​(int radix)

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

22booleanhasNextLine​()

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

23booleanhasNextLong​()

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

24booleanhasNextLong​(int radix)

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

25booleanhasNextShort​()

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

26booleanhasNextShort​(int radix)

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

27IOExceptionioException​()

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

28Localelocale​()

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

29MatchResultmatch​()

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

30Stringnext​()

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

31Stringnext​(String pattern)

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

32Stringnext​(Pattern pattern)

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

33BigDecimalnextBigDecimal​()

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

34BigIntegernextBigInteger​()

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

35BigIntegernextBigInteger​(int radix)

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

36booleannextBoolean​()

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

37bytenextByte​()

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

38bytenextByte​(int radix)

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

39doublenextDouble​()

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

40floatnextFloat​()

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

41intnextInt​()

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

42intnextInt​(int radix)

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

43StringnextLine​()

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

44longnextLong​()

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

45longnextLong​(int radix)

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

46shortnextShort​()

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

47shortnextShort​(int radix)

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

48intradix​()

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

49voidremove​()

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

50Scannerreset​()

重设此扫描仪。

51Scannerskip​(String pattern)

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

52Scannerskip​(Pattern pattern)

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

53Stream<String>tokens​()

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

54StringtoString​()

返回此 Scanner的字符串表示 Scanner

55ScanneruseDelimiter​(String pattern)

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

56ScanneruseDelimiter​(Pattern pattern)

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

57ScanneruseLocale​(Locale locale)

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

58ScanneruseRadix​(int radix)

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值