最近要面试了,以前对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
分享到:
相关推荐
在Java编程语言中,`Scanner`类是处理基本数据类型(如int、float等)以及字符串输入的一种常用方法。它位于`java.util`包中,可以用来读取不同类型的输入,如文本、数字等。在本篇文章中,我们将深入探讨如何使用`...
#### 三、常用方法详解 1. **创建`Scanner`对象** 创建一个`Scanner`对象通常用于读取标准输入或文件: ```java Scanner reader = new Scanner(System.in); // 读取标准输入 Scanner fileReader = new Scanner...
### Java 输入语句 `Scanner` 用法详解 #### 一、引言 在 Java 编程语言中,实现从用户那里获取输入是一项常见的需求。无论是命令行应用程序还是图形界面应用,都需要能够处理用户交互。Java 提供了多种方式来处理...
**Advanced Port Scanner超级扫描工具详解** Advanced Port Scanner是一款专为Windows操作系统设计的高效网络端口扫描工具,它能够帮助用户快速、准确地检测网络设备上的开放端口,从而揭示网络服务的状态和潜在的...
### Java常用方法集合 #### 一、`java.lang.*`包概述 `java.lang.*` 包含了Java语言中最基本且最常用的类,这些类是自动导入到每一个程序中的,因此无需显式地导入。它包括了如 `String`, `Integer`, `System`, `...
**AdvancedIPScanner 2.4.2601.0: 网络IP扫描工具详解** AdvancedIPScanner是一款高效且实用的网络IP扫描工具,主要用于帮助用户快速定位和管理网络中的设备。这款软件以其易用性和强大的功能,在IT行业中备受青睐...
Scanner类中最常用的方法有next()和nextLine()。 next()方法用于读取输入的下一个标记(token),直到遇到空白符(空格、制表符等)为止。例如: ```java String s; Scanner userInput = new Scanner(System.in); ...
新手入侵检测常用工具详解 在信息安全领域,入侵检测是非常重要的一个方面,对于新手来说,了解常用的入侵检测工具是非常必要的。本文将对常用的入侵检测工具进行详细的介绍,以便新手更好地学习和应用这些工具。 ...
标题中的"New-key-scanner.rar_Objective Key_key scanner"揭示了我们讨论的主题是关于一个新型的按键扫描程序,特别关注其Objective Key算法。这个程序可能是为了监控或分析用户输入行为,比如在各种情况下的按键...
Java常用API(Scanner、Random)匿名对象详解 Java中封装了许多API供用户使用,Scanner和Random便是其中之一。API实际就是类,我们只需按照其语法编写即可,无需了解其根本源代码。 Scanner类 Scanner类是Java中的...
### Java常用系统类库实验详解 #### 实验概述与目标 本次实验主要聚焦于Java的预定义类,尤其是那些在日常编程中频繁使用的系统类库。实验旨在加深学生对Java预定义类的理解,掌握常用类的运用技巧,以及熟练方法...
本文将详细介绍如何使用Scanner类以及其常用方法。 首先,创建Scanner对象的基本语法是: ```java Scanner sc = new Scanner(System.in); ``` 这里的`System.in`代表标准输入流,通常对应于键盘输入。 ### 简单的...
Java 算法函数详解 Java 中的算法函数是非常重要的概念,它们广泛应用于各种编程领域,以下将详细介绍 Java 中常用的算法函数。 输入输出 Java 中的输入输出函数主要使用 `java.util.Scanner` 类,通过创建 `...
### 常用类知识点详解 #### 一、Object类 **1.1 Object类的基础概念** - **地位与作用**:`Object`类在Java类层次结构中扮演着极其重要的角色,它是所有类的基类。不论是直接或间接地,每一个自定义类都是`Object...
《SICK激光扫描仪调试手册详解》 SICK激光扫描仪是工业自动化领域常用的一种高精度传感器设备,广泛应用于安全防护、物体检测、自动化导航等多个场景。为了确保其正常高效运行,掌握正确的调试方法至关重要。以下,...
此外,文件I/O操作也是Java常用的功能,包括使用File类、Scanner类进行文件读写,以及流的概念。 线程是Java的一大亮点,文档会详细阐述如何创建和管理线程,包括同步和互斥机制,如synchronized关键字和wait/...
020507_【第5章:面向对象基础】_String类的常用方法.pdf 020508_【第5章:面向对象基础】_引用传递及其应用笔记.pdf 020509_【第5章:面向对象基础】_this关键字笔记.pdf 020510_【第5章:面向对象基础】_static...
### API文档阅读方法详解 #### 一、API概念解析 API(Application Programming Interface,应用程序编程接口)是指在软件系统中预定义的一组函数或者方法,它们为开发者提供了访问特定功能或者服务的方式,而无需...
以下是一些Scanner类中常用的方法: - `delimiter()`:返回当前用于匹配分隔符的Pattern。 - `hasNext()`:检查扫描器的当前位置后面是否存在更多输入。 - `hasNextLine()`:检查扫描器的输入中是否存在下一行。 - ...