Scanner常用方法详解

最近要面试了,以前对Scanner不怎么熟悉,一直都是使用nextLine()方法从控制台读取每一行,然后再进行分割,今天终于抽时间好好研究了一下。
关于怎么使用网上有很多教程可以参看,我主要介绍一下hasNextInt(),next(),nextLine(),nextInt()相关区别

1.next()和nextLine()的区别:两个函数返回的都是是字符串,如果输入一行数据然后回车,next()会默认使用空格作为正则表达式来分割,而nextLine()直接读取输入对整行。
2.next()与nextInt()的区别:next()返回对是字符串,而nextInt会将字符串转成整数,其他类似,转换失败就抛出异常InputMismatchException。
3.hasNextInt()与nextInt()的区别:s.hasNextInt()判断下一个输入对是否是符合相应类型,符合就是true,否则false,他们还以一个区别就是hasnext()不截断,而next是要[b]截断[/b]的,为了防止用nextInt()转换时抛出异常,就先判断一下在转换。
下面对截断进行说明:
如输入:
Scanner s = new Scanner(System.in);
System.out.println(s.hasNextInt());
System.out.println(s.hasNextInt());

在控制台输入:
123 tttt<回车>
打印出对结果是

true
true

这就说明了对控制台输入字符串通过空格分隔以后两次s.hashNextInt()判断的都是第一个,即123,所以两个都返回了true。
而如输入

Scanner s = new Scanner(System.in);
System.out.println(s.nextInt());
System.out.println(s.nextInt());

如过输入123 456,
则输出是

123
456

而不是两个都是123,所以发生了截断。

4:对while(s.hashNextInt()){}语句的讨论
对于如下语句

Scanner s = new Scanner(System.in);
while (s.hasNextInt()) {
System.out.println(s.nextInt());
}

这样就是防止s.nextInt()转换的时候错误。输入345 ttt<回车>,就只会输出第一个,而当输入2 45<回车>,此时会输出2,45,这是因为先判断了第一个2,通过,然后执行s.nextInt(),就被截断了,然后再判断s.hasNextInt()的时候,判断对就是下一个45;
但是对于如下代码

while (s.hasNextInt()) {
System.out.println(s.nextInt());
System.out.println(s.nextInt());
System.out.println(s.nextInt());
System.out.println(s.nextInt());
}

如果是这种情况,则s.hasNextInt()指挥判断第一分割字符,最后在进入while循环,被截断四次,然后用第5个去执行s.hasNextInt()方法,判断是否符合。
测试如下:
输入:1 2 3 4 tt 6 7<回车>,结果如下(此时跳出while循环,程序停止)

1 2 3 4 tt 6 7
1
2
3
4

如过输入:1 2 3 4 5 6 7 8 ,输入结果如下(此时程序还没有停止)

1 2 3 4 5 6 7 8
1
2
3
4
5
6
7
8


以上只是对我一直以来的迷惑进行了简单解释,如过要真正理解,可以查看Scanner源代码。

------------------------------------------------------------更新----------------------------------------------------------------
如何退出while(scanner.hasnext()){}问题

public static void main(String[] args) throws Exception {

// Scanner scan = new Scanner(new File("D:\\testScanner.txt"));
Scanner scan = new Scanner(System.in);
while (scan.hasNext()) {
System.out.println(scan.next());
}
System.out.println("out");

}

要想退出while循环,如果是从键盘上读入,在windows上可以用ctl+z,就可以退出wile循环,如果读取文件,因为文件后面都有EOF文件结束符,所以读取完文件以后会自动退出while循环
下面链接一个自认为总结比较好的链接
http://blog.csdn.net/tdw2011/article/details/44921295
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Scanner类是Java常用的输入数据的工具类,它提供了很多方法来获取不同类型的数据。其中,hasNext()方法是一个非常重要的方法,它可以判断输入流中是否有下一个元素。 hasNext()方法返回一个boolean类型的值,如果输入流中还有下一个元素,则返回true;否则返回false。在使用hasNext()方法时,需要注意以下几点: 1. hasNest()方法必须在读取元素之前调用,否则会抛出NoSuchElementException异常。 2. hasNest()方法会阻塞程序,直到输入流中有下一个元素或者输入流结束。如果输入流结束,hasNext()方法将返回false。 3. hasNest()方法默认使用空格和回车符作为分隔符,因此如果输入流中有空格或回车符,hasNext()方法将认为输入流中还有下一个元素。 4. 如果输入流中有多个元素,hasNext()方法只会返回第一个元素,不会读取所有元素。 下面是一个使用hasNext()方法读取整数的例子: ```java import java.util.Scanner; public class TestScanner { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入整数:"); if (scanner.hasNextInt()) { int num = scanner.nextInt(); System.out.println("你输入的整数是:" + num); } else { System.out.println("输入的不是整数!"); } scanner.close(); } } ``` 在这个例子中,我们首先创建了一个Scanner对象,并使用hasNextInt()方法判断输入流中是否有下一个整数。如果有,就使用nextInt()方法读取该整数并输出;否则,输出“输入的不是整数!”。最后,关闭Scanner对象。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值