最近要面试了,以前对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是要
截断的,为了防止用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
分享到:
相关推荐
一个简单的Scanner类的next()方法例子,最适合小白参考Scanner a = new Scanner(System.in); String v = a.next(); System.out.print("你输入的值是:"+ v); Scanner b = new Scanner(System.in); ...
1.鼠标邮件发送要测试的反序列化数据到 Manual testing 2.选择测试方式,进行测试 3.假如测试出来了,鼠标右键发送到 exploiting 模块
Scanner类 大概的接收方法,各个类的接收方法;
IIS,Scanner利用IIS漏洞写shell . IIS,Scanner利用IIS漏洞写shell IIS,Scanner利用IIS漏洞写shell
ASML Scanner 光刻机介绍
java中Scanner类nextLine()和next()的区别和使用方法 java中Scanner类nextLine()和next()的区别和使用方法
sonar-scanner
Topology-Scanner是WeOps团队免费开放的一个网络拓扑自动扫描模块,可以自动发现网络设备的类型、网络设备之间的互联
sonar-scanner-2.8
Telnet scanner in network
Colasoft MAC Scanner 是一款用于扫描 IP 地址和 MAC 地址的扫描工具。该软件可以根据在一台计算机上的多个 NIC 上配置的 IP 地址自动地侦测到所有的之网并且可以根据你的需要扫描之网上定义的 MAC 地址和 IP 地址。
Scanner是Java中的一个实用程序类,它位于java.util包下。Scanner类主要用于扫描输入文本,并可以从控制台、文件、输入流等...调用方法:接着,你可以调用Scanner对象的方法来读取用户的输入。例如,scanner.nextLine
三、Scanner 类有哪些常用方法? 先导入java.util包,语法:import java.util.Scanner; 第一步 创建从控制台输入对象 第二步 提示语句 第三步 接受控制台的变量 第四步 输出或使用 import java.util.Scanner; ...
通过阅读本文,您将能够熟练掌握Scanner类的常用方法和技巧,并在面试中自信地回答相关问题。无论您是准备面试还是想加深对Scanner类的理解,本文都能为您提供有益的指导和答案,助您在面试中脱颖而出。让我们一起来...
主要介绍了Java Scanner类及其方法使用图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
在这个例子中,我们首先导入了 Scanner 类,然后在 main 方法中创建了一个 Scanner 对象。我们使用 System.out.println 方法来提示用户输入,然后使用 Scanner 的 next 和 nextInt 方法来获取用户输入的字符串和整数...
Scanner类的用法2007-03-25 14:41Scanner是SDK1.5新增的一个类,可是使用该类创建一个对象.
rtlsdr scanner code for sldr
Java内存马查杀 ...java-memshell-scanner:通过jsp脚本扫描并查杀各类中间件内存马。 只需要将tomcat-memshell-scanner.jsp放在可能被注入内存马的web录下,然后使用浏览器访问即可直接获得扫描结果。
Acunetix Web Vulnerability Scanner,Acunetix Web Vulnerability Scanner,Acunetix Web Vulnerability Scanner