java scanner对象_Java 常用对象-Scanner类

2017-11-02 16:33:11

Scanner类:一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器。

Scanner 使用分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空白匹配。然后可以使用不同的 next 方法将得到的标记转换为不同类型的值。

*构造方法

7a8a2f57a9656093218285081a237ede.png

*常用方法

基本格式:hasNextXxx():判断是否还有下一个输入项,其中Xxx可以是Int,Double等。如果需要判断是否包含下一个字符串,可以省略Xxx。

nextXxx():获取下一个输入项。

默认情况下,Scanner使用空格,回车作为分隔符(也就是在读取的时候默认跳过这两个字符,不进行读取)。在敲入回车后,将当前缓冲区的内容交给Scanner进行扫描(包括回车符\r\n)。

常用的有Public int nextInt(),Public String nextLine()。

7cf66ba6224a752ae034703ae3a4ec14.png

617ec0bca8592979df1f3ff7b40bd94d.png

b470eb00a0fd7d6a232eaeae121d212e.png

50fb984026e93cdc5fbc3257ae190cb9.png

先获取数值类型,再获取字符串类型会出现问题。这个问题在C++中也遇到过。

原因解析:当敲完数字并回车时,此时缓冲区内的数据是数字加上回车符,在Scanner扫描的时候,把数字交给了x,由于是使用的nextline,导致也会读取回车字符,所以把回车符交给了y,导致了这种情况。

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

//y会为空

int x=sc.nextInt();

String y=sc.nextLine();

System.out.println(x+y);

}

解决方法:

A:重定义一个扫描器

B:先全部使用字符串获取,再转换

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

//y会为空

int x=sc.nextInt();

Scanner sc2 = new Scanner(System.in);

String y=sc2.nextLine();

System.out.println(x+y);

}

如果把nextline换成next就没有问题了,no zuo no die啊,哈哈。

Scanner sc = new Scanner(System.in);

int x = sc.nextInt();

String s = sc.next();

System.out.println(x + s);

一些测试:

1)新定义的Scanner是否会把前一个的缓冲区给破坏

Scanner sc = new Scanner(System.in);

System.out.println(sc.nextInt());

Scanner sc2 = new Scanner(System.in);

System.out.println(sc2.nextInt());

System.out.println(sc.nextInt());

17ba61e5dd58894e914341779840dc1b.png

结论:不会,前一个缓冲区内容已经交给了sc,新创建的sc2读取的是自己的缓冲区内容。

2)next读取字符串是否会读到换行符

Scanner sc = new Scanner(System.in);

System.out.print(sc.next());

System.out.print(sc.next());

System.out.println("是否读到了换行符");

70fa77218eec63fc8aee1fd76c592cbc.png

结论:不会,会自动跳过空格和换行符。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值