Java Scanner 类
发布时间:2026-10-20 | 浏览:1
java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入。
下面是创建 Scanner 对象的基本语法:
接下来我们演示一个最简单的数据输入,并通过 Scanner 类的 next() 与 nextLine() 方法获取输入的字符串,在读取前我们一般需要 使用 hasNext 与 hasNextLine 判断是否还有输入的数据:
ScannerDemo.java 文件代码:
可以看到 com 字符串并未输出,接下来我们看 nextLine。
使用 nextLine 方法:
ScannerDemo.java 文件代码:
可以看到 com 字符串输出。
next() 与 nextLine() 区别
1、一定要读取到有效字符后才可以结束输入。
2、对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
next() 不能得到带有空格的字符串。
1、以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。
如果要输入 int 或 float 类型的数据,在 Scanner 类中也有支持,但是在输入之前最好先使用 hasNextXxx() 方法进行验证,再使用 nextXxx() 来读取:
ScannerDemo.java 文件代码:
以下实例我们可以输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果:
ScannerDemo.java 文件代码:
执行以上程序输出结果为(输入非数字来结束输入):
更多内容可以参考 API 文档: https://www.runoob.com/manual/jdk11api/java.base/java/util/Scanner.html 。
#0 Mrodot mro***@qq.com 131 输入的时候字符都是可见的,所以Scanner类不适合从控制台读取密码。从Java SE 6开始特别引入了Console类来实现这个目的。若要读取一个密码,可以采用下面这段代码: Console cons = System.console(); String username = cons.readline("User name: "); char[] passwd = cons.readPassword("Password: "); 为了安全起见,返回的密码存放在一维字符数组中,而不是字符串中。在对密码进行处理之后,应该马上用一个填充值覆盖数组元素。 采用Console对象处理输入不如采用Scanner方便。每次只能读取一行输入,而没有能够读取一个单词或者一个数值的方法。 Mrodot Mrodot mro***@qq.com 9年前 (2018-01-12)
输入的时候字符都是可见的,所以Scanner类不适合从控制台读取密码。从Java SE 6开始特别引入了Console类来实现这个目的。若要读取一个密码,可以采用下面这段代码:
为了安全起见,返回的密码存放在一维字符数组中,而不是字符串中。在对密码进行处理之后,应该马上用一个填充值覆盖数组元素。
采用Console对象处理输入不如采用Scanner方便。每次只能读取一行输入,而没有能够读取一个单词或者一个数值的方法。
#0 Seeker98 115***9822@qq.com 参考地址 41 通过StringTokenizer类可以分解输入的整行得到的带空格的字符串。默认情况下,StringTokenizer以空格,制表符,换行符和回车符作为分割依据。 import java.util.Scanner; import java.util.StringTokenizer; class Main { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); System.out.println("输入数据:"); StringTokenizer stringTokenizer=new StringTokenizer(scanner.nextLine()); System.out.println("分隔后:"); while(stringTokenizer.hasMoreTokens()){ System.out.println(stringTokenizer.nextToken()); } } } 测试结果: $ javac Main.java $ java Main 输入数据: runoob com 分隔后: runoob com Seeker98 Seeker98 115***9822@qq.com 参考地址 9年前 (2018-01-22)
115***9822@qq.com
通过StringTokenizer类可以分解输入的整行得到的带空格的字符串。默认情况下,StringTokenizer以空格,制表符,换行符和回车符作为分割依据。
115***9822@qq.com
#0 jie 132***7372@qq.com 43 Scanner 不仅能从输入流中读取,也能从文件中读取,除了构建 Scanner 对象的方法,其他和上文给出的完全相同,以下案例从一个名为 test.txt 的文件中读取整数。 test.txt 文件内容: 1 2 3 4 5 Fileio.java 文件内容: import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; public class Fileio { public static void main(String[] args) throws FileNotFoundException { int[] arr=new int[10]; int i=0; Scanner sc=new Scanner(new File("test.txt")); while(sc.hasNextInt()) { arr[i]=sc.nextInt(); i++; } sc.close(); System.out.printf("读取了 %d 个数\n",i); for(int j=0;j<i;j++) { System.out.println(arr[j]); } } } 输出结果: 读取了 5 个数 1 2 3 4 5 jie jie 132***7372@qq.com 9年前 (2018-01-29)
132***7372@qq.com
Scanner 不仅能从输入流中读取,也能从文件中读取,除了构建 Scanner 对象的方法,其他和上文给出的完全相同,以下案例从一个名为 test.txt 的文件中读取整数。
Fileio.java 文件内容:
132***7372@qq.com
#0 zzh学java hj0***zh@163.com 46 处理接受整理和小数的逻辑时,需要在 else 的分支逻辑里把非整数的输入接收走,否则会影响后续 hasNextFloat 判断和接受小数的逻辑。 Scanner scan = new Scanner(System.in); // 从键盘接收数据 int i = 0; float f = 0.0f; System.out.print("输入整数:"); if (scan.hasNextInt()) { // 判断输入的是否是整数 i = scan.nextInt(); // 接收整数 System.out.println("整数数据:" + i); } else { scan.nextLine(); // 没接收到整数,把其他类型收掉,否则会影响到后边接受小数的逻辑 // 输入错误的信息 System.out.println("输入的不是整数!"); } zzh学java zzh学java hj0***zh@163.com 7年前 (2019-07-12)
hj0***zh@163.com
处理接受整理和小数的逻辑时,需要在 else 的分支逻辑里把非整数的输入接收走,否则会影响后续 hasNextFloat 判断和接受小数的逻辑。
hj0***zh@163.com
#0 你好,未来 yan***min12@163.com 参考地址 32 关于Console类的一点小补充:如果直接在集成开发环境下执行代码会报错(我是在IntelliJ里面跑的) Exception in thread "main" java.lang.NullPointerException 可以直接在命令提示符中采用javac XX.java , java XX的方式运行代码,可获得想要的效果。具体可见: https://coderanch.com/t/626329/java/readLine-method-System-Console-throwing 你好,未来 你好,未来 yan***min12@163.com 参考地址 7年前 (2019-10-18)
yan***min12@163.com
关于Console类的一点小补充:如果直接在集成开发环境下执行代码会报错(我是在IntelliJ里面跑的)
可以直接在命令提示符中采用javac XX.java , java XX的方式运行代码,可获得想要的效果。具体可见:
https://coderanch.com/t/626329/java/readLine-method-System-Console-throwing
yan***min12@163.com
Python / 数据科学 Python 教程 Python2.x 教程 FastAPI 教程 Flask 教程 Django 教程 NumPy 教程 Pandas 教程 SciPy 教程 Matplotlib 教程 Dash 教程 Jupyter Notebook 教程 Pillow 教程 量化交易 R 教程 Julia 教程
Jupyter Notebook 教程
AI / 智能开发 AI Agent(智能体) AI(人工智能) Codex 教程 Vibe Coding 教程 Claude Code OpenCode Skills(技能) Ollama 教程 Hermes Agent DeepSeek Harness Pi Agent AI 数学基础 TensorFlow 教程 PyTorch 教程 Scikit-learn 教程 机器 教程 LangChain 自然语言处理 NLP OpenCV 教程 Selenium 教程 Playwright 教程
DeepSeek Harness
Scikit-learn 教程
前端开发 HTML 教程 HTML5 教程 CSS 教程 CSS3 教程 JavaScript 教程 HTML DOM 教程 TypeScript 教程 AJAX 教程 JSON 教程 Tailwind CSS 教程 Bootstrap4 教程 Bootstrap5 教程 Foundation 教程 Vue.js 教程 Vue3 教程 React 教程 Next.js 教程 AngularJS 教程 Angular 教程 jQuery 教程 jQuery UI 教程 jQuery EasyUI 教程 ECharts 教程 Chart.js 教程 Highcharts 教程 Google 地图 教程 SVG 教程 Font Awesome 教程
Tailwind CSS 教程
jQuery EasyUI 教程
Font Awesome 教程
后端开发 Node.js 教程 Electron 教程 PHP 教程 Java 教程 Go 教程 Rust 教程 C# 教程 Servlet 教程 JSP 教程 ASP 教程 AppML 教程 VBScript 教程 Swagger 教程 RESTful API 教程 Docker 教程 Linux 教程 ZooKeeper 教程
数据库 SQL 教程 MySQL 教程 PostgreSQL 教程 SQLite 教程 MongoDB 教程 Redis 教程 Memcached 教程
移动开发 Android 教程 Flutter 教程 Ionic 教程 jQuery Mobile 教程 Swift 教程 Kotlin 教程
jQuery Mobile 教程
DevOps / 工程化 Git 教程 SVN 教程 CMake 教程 Maven 教程 VS Code 教程 Obsidian 教程 PyCharm 教程 Eclipse 教程 Markdown 教程 LaTeX 教程
编程语言 C 教程 C++ 教程 Zig 教程 Scala 教程 Ruby 教程 Perl 教程 Lua 教程 Dart 教程 汇编语言 教程 Verilog 教程
计算机基础 计算机组成原理 数据结构与算法 C 语言数据结构与算法 设计模式 Python 设计模式 正则表达式 HTTP 教程 TCP/IP 教程 网络协议 W3C 教程
XML / Web Service XML 教程 DTD 教程 XML DOM 教程 XSLT 教程 XPath 教程 XQuery 教程 XLink 教程 XPointer 教程 XML Schema 教程 XSL-FO 教程 Web Service 教程 WSDL 教程 SOAP 教程 RSS 教程 RDF 教程
.NET ASP.NET 教程 MVC 教程 Razor 教程 Web Forms 教程 Web Pages 教程 PowerShell 教程
网站建设 网站建设指南 浏览器信息 网站主机教程 网站品质